For SNAT, don't store the pre-fragment L2 header before actions are applied.
[sliver-openvswitch.git] / lib / vconn-unix.c
index e84674f..b1a7d8a 100644 (file)
@@ -44,7 +44,7 @@
 #include <string.h>
 #include <unistd.h>
 #include "ofpbuf.h"
-#include "openflow.h"
+#include "openflow/openflow.h"
 #include "packets.h"
 #include "poll-loop.h"
 #include "socket-util.h"
@@ -85,7 +85,6 @@ struct vconn_class unix_vconn_class = {
     unix_open,                  /* open */
     NULL,                       /* close */
     NULL,                       /* connect */
-    NULL,                       /* accept */
     NULL,                       /* recv */
     NULL,                       /* send */
     NULL,                       /* wait */
@@ -97,7 +96,7 @@ static int punix_accept(int fd, const struct sockaddr *sa, size_t sa_len,
                         struct vconn **vconnp);
 
 static int
-punix_open(const char *name, char *suffix, struct vconn **vconnp)
+punix_open(const char *name, char *suffix, struct pvconn **pvconnp)
 {
     int fd;
 
@@ -107,7 +106,7 @@ punix_open(const char *name, char *suffix, struct vconn **vconnp)
         return errno;
     }
 
-    return new_pstream_vconn("punix", fd, punix_accept, vconnp);
+    return new_pstream_pvconn("punix", fd, punix_accept, pvconnp);
 }
 
 static int
@@ -115,26 +114,19 @@ punix_accept(int fd, const struct sockaddr *sa, size_t sa_len,
              struct vconn **vconnp)
 {
     const struct sockaddr_un *sun = (const struct sockaddr_un *) sa;
+    int name_len = get_unix_name_len(sa_len);
     char name[128];
 
-    if (sa_len >= offsetof(struct sockaddr_un, sun_path)) {
-        snprintf(name, sizeof name, "unix:%.*s",
-                (int) (sa_len - offsetof(struct sockaddr_un, sun_path)),
-                sun->sun_path);
+    if (name_len > 0) {
+        snprintf(name, sizeof name, "unix:%.*s", name_len, sun->sun_path);
     } else {
         strcpy(name, "unix");
     }
     return new_stream_vconn(name, fd, 0, 0, vconnp);
 }
 
-struct vconn_class punix_vconn_class = {
-    "punix",                    /* name */
-    punix_open,                 /* open */
-    NULL,                       /* close */
-    NULL,                       /* connect */
-    NULL,                       /* accept */
-    NULL,                       /* recv */
-    NULL,                       /* send */
-    NULL,                       /* wait */
+struct pvconn_class punix_pvconn_class = {
+    "punix",
+    punix_open,
 };