datapath: Orphan frags in skb_zerocopy and handle errors
[cascardo/ovs.git] / lib / vlandev.c
index 0ccb6ca..e5cc2fd 100644 (file)
@@ -26,6 +26,7 @@
 #include "dummy.h"
 #include "hash.h"
 #include "shash.h"
+#include "socket-util.h"
 #include "vlog.h"
 
 VLOG_DEFINE_THIS_MODULE(vlandev);
@@ -212,7 +213,7 @@ vlandev_linux_refresh(void)
             return 0;
         }
 
-        VLOG_WARN_RL(&rl, "%s: open failed (%s)", fn, strerror(error));
+        VLOG_WARN_RL(&rl, "%s: open failed (%s)", fn, ovs_strerror(error));
         return error;
     }
 
@@ -220,8 +221,7 @@ vlandev_linux_refresh(void)
         char vlan_dev[16], real_dev[16];
         int vid;
 
-        if (sscanf(line, "%15[^ |] | %d | %15s",
-                   vlan_dev, &vid, real_dev) == 3) {
+        if (ovs_scan(line, "%15[^ |] | %d | %15s", vlan_dev, &vid, real_dev)) {
             vlandev_add__(vlan_dev, real_dev, vid);
         }
     }
@@ -237,20 +237,14 @@ do_vlan_ioctl(const char *netdev_name, struct vlan_ioctl_args *via,
 {
     static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 1);
     int error;
-    int sock;
 
     via->cmd = cmd;
     ovs_strlcpy(via->device1, netdev_name, sizeof via->device1);
 
-    sock = netdev_linux_get_af_inet_sock();
-    if (sock < 0) {
-        return -sock;
-    }
-
-    error = ioctl(sock, SIOCSIFVLAN, via) < 0 ? errno : 0;
+    error = af_inet_ioctl(SIOCSIFVLAN, via);
     if (error) {
         VLOG_WARN_RL(&rl, "%s: VLAN ioctl %s failed (%s)",
-                     netdev_name, cmd_name, strerror(error));
+                     netdev_name, cmd_name, ovs_strerror(error));
     }
     return error;
 }
@@ -308,7 +302,7 @@ vlandev_stub_del(const char *vlan_dev OVS_UNUSED)
     return EOPNOTSUPP;
 }
 
-static const struct vlandev_class vlandev_stub_class = {
+static const struct vlandev_class OVS_UNUSED vlandev_stub_class = {
     NULL,                       /* vd_refresh */
     vlandev_stub_add,
     vlandev_stub_del
@@ -380,7 +374,7 @@ static int
 vlandev_del__(const char *vlan_dev)
 {
     struct shash_node *vd_node = shash_find(&vlan_devs, vlan_dev);
-    if (!vd_node) {
+    if (vd_node) {
         struct vlan_dev *vd = vd_node->data;
         struct vlan_real_dev *vrd = vd->real_dev;