X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fnetdev-vport.c;h=39a1bb94d47604105a5e56f21e07554ef6e76749;hb=28a14bf3d86efb8f0f29936e84cc9e4e384dffe8;hp=c6d4db89eeccb64c3d7692918683b41c7d761829;hpb=0574f71b4b6820cecb8247a6e0269606c8ef2edf;p=openvswitch diff --git a/lib/netdev-vport.c b/lib/netdev-vport.c index c6d4db89..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" @@ -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; }