X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fnetdev-vport.c;h=39a1bb94d47604105a5e56f21e07554ef6e76749;hb=c0cb6f59f51ceb1c16e38b050bb8c3345ba984c0;hp=ae043c266a8df9bc2d6c2c3060bf9a37d4409a86;hpb=b46ccdf582946f30d80735345c533c23a7f035c0;p=openvswitch diff --git a/lib/netdev-vport.c b/lib/netdev-vport.c index ae043c26..39a1bb94 100644 --- a/lib/netdev-vport.c +++ b/lib/netdev-vport.c @@ -26,6 +26,8 @@ #include #include "byte-order.h" +#include "daemon.h" +#include "dirs.h" #include "dpif-linux.h" #include "hash.h" #include "hmap.h" @@ -502,7 +504,7 @@ netdev_vport_poll_add(struct netdev *netdev, struct list *list; struct shash_node *shash_node; - shash_node = shash_find_data(&netdev_vport_notifiers, poll_name); + shash_node = shash_find(&netdev_vport_notifiers, poll_name); if (!shash_node) { list = xmalloc(sizeof *list); list_init(list); @@ -693,8 +695,8 @@ parse_tunnel_config(const char *name, const char *type, */ use_ssl_cert = shash_find_data(args, "use_ssl_cert"); if (!use_ssl_cert || strcmp(use_ssl_cert, "true")) { - VLOG_WARN("%s: 'peer_cert' requires 'certificate' argument", - name); + VLOG_ERR("%s: 'peer_cert' requires 'certificate' argument", + name); return EINVAL; } ipsec_mech_set = true; @@ -706,8 +708,8 @@ parse_tunnel_config(const char *name, const char *type, || !strcmp(node->name, "private_key") || !strcmp(node->name, "use_ssl_cert"))) { /* Ignore options not used by the netdev. */ - } else if (is_gre && (!strcmp(node->name, "key") && - !strcmp(node->name, "in_key") && + } else if (is_gre && (!strcmp(node->name, "key") || + !strcmp(node->name, "in_key") || !strcmp(node->name, "out_key"))) { /* Handled separately below. */ } else { @@ -716,14 +718,24 @@ parse_tunnel_config(const char *name, const char *type, } if (is_ipsec) { + char *file_name = xasprintf("%s/%s", ovs_rundir(), + "ovs-monitor-ipsec.pid"); + pid_t pid = read_pidfile(file_name); + free(file_name); + if (pid < 0) { + VLOG_ERR("%s: IPsec requires the ovs-monitor-ipsec daemon", + name); + return EINVAL; + } + if (shash_find(args, "peer_cert") && shash_find(args, "psk")) { - VLOG_WARN("%s: cannot define both 'peer_cert' and 'psk'", name); + VLOG_ERR("%s: cannot define both 'peer_cert' and 'psk'", name); return EINVAL; } if (!ipsec_mech_set) { - VLOG_WARN("%s: IPsec requires an 'peer_cert' or psk' argument", - name); + VLOG_ERR("%s: IPsec requires an 'peer_cert' or psk' argument", + name); return EINVAL; } } @@ -734,8 +746,8 @@ parse_tunnel_config(const char *name, const char *type, } if (!daddr) { - VLOG_WARN("%s: %s type requires valid 'remote_ip' argument", - name, type); + VLOG_ERR("%s: %s type requires valid 'remote_ip' argument", + name, type); return EINVAL; } nl_msg_put_be32(options, ODP_TUNNEL_ATTR_DST_IPV4, daddr); @@ -858,22 +870,22 @@ parse_patch_config(const char *name, const char *type OVS_UNUSED, peer = shash_find_data(args, "peer"); if (!peer) { - VLOG_WARN("%s: patch type requires valid 'peer' argument", name); + VLOG_ERR("%s: patch type requires valid 'peer' argument", name); return EINVAL; } if (shash_count(args) > 1) { - VLOG_WARN("%s: patch type takes only a 'peer' argument", name); + VLOG_ERR("%s: patch type takes only a 'peer' argument", name); return EINVAL; } if (strlen(peer) >= IFNAMSIZ) { - VLOG_WARN("%s: patch 'peer' arg too long", name); + VLOG_ERR("%s: patch 'peer' arg too long", name); return EINVAL; } if (!strcmp(name, peer)) { - VLOG_WARN("%s: patch peer must not be self", name); + VLOG_ERR("%s: patch peer must not be self", name); return EINVAL; }