netdev-linux: Read packet auxdata to obtain vlan_tid
[sliver-openvswitch.git] / include / sparse / sys / socket.h
index d7e17ea..3212bf4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2012 Nicira, Inc.
+ * Copyright (c) 2011, 2012, 2013 Nicira, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,6 +23,7 @@
 
 #include "openvswitch/types.h"
 #include <sys/uio.h>
+#include <stddef.h>
 
 typedef unsigned short int sa_family_t;
 typedef __socklen_t socklen_t;
@@ -47,6 +48,37 @@ struct msghdr {
     int            msg_flags;
 };
 
+struct cmsghdr {
+    size_t cmsg_len;
+    int cmsg_level;
+    int cmsg_type;
+    unsigned char cmsg_data[];
+};
+
+#define __CMSG_ALIGNTO sizeof(size_t)
+#define CMSG_ALIGN(LEN) \
+        (((LEN) + __CMSG_ALIGNTO - 1) / __CMSG_ALIGNTO * __CMSG_ALIGNTO)
+#define CMSG_DATA(CMSG) ((CMSG)->cmsg_data)
+#define CMSG_LEN(LEN) (sizeof(struct cmsghdr) + (LEN))
+#define CMSG_SPACE(LEN) CMSG_ALIGN(CMSG_LEN(LEN))
+#define CMSG_FIRSTHDR(MSG) \
+    ((MSG)->msg_controllen ? (struct cmsghdr *) (MSG)->msg_control : NULL)
+#define CMSG_NXTHDR(MSG, CMSG) __cmsg_nxthdr(MSG, CMSG)
+
+static inline struct cmsghdr *
+__cmsg_nxthdr(struct msghdr *msg, struct cmsghdr *cmsg)
+{
+    size_t ofs = (char *) cmsg - (char *) msg->msg_control;
+    size_t next_ofs = ofs + CMSG_ALIGN(cmsg->cmsg_len);
+    return (next_ofs < msg->msg_controllen
+            ? (void *) ((char *) msg->msg_control + next_ofs)
+            : NULL);
+}
+
+enum {
+    SCM_RIGHTS = 1
+};
+
 enum {
     SOCK_DGRAM,
     SOCK_RAW,
@@ -55,6 +87,7 @@ enum {
 };
 
 enum {
+    SOL_PACKET,
     SOL_SOCKET
 };
 
@@ -75,7 +108,8 @@ enum {
     SO_SNDLOWAT,
     SO_SNDTIMEO,
     SO_TYPE,
-    SO_RCVBUFFORCE
+    SO_RCVBUFFORCE,
+    SO_ATTACH_FILTER
 };
 
 enum {