summaryrefslogtreecommitdiff
path: root/ring.h
diff options
context:
space:
mode:
authorDaniel Borkmann <dborkman@redhat.com>2013-05-31 11:18:36 +0200
committerDaniel Borkmann <dborkman@redhat.com>2013-05-31 11:20:01 +0200
commit2f39b007d5382d01fc424e22b8e1a3681c2bc8cf (patch)
treeb2d7b6bec9932c6bbfec6af8aa016cbd372adf72 /ring.h
parented4e3c64dc80bb775f9ecfdd2165297e34e2fb0c (diff)
ring: implement setup of tpacket v3 ring
Implement ring setup routines and structures for TPACKET_V3. Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
Diffstat (limited to 'ring.h')
-rw-r--r--ring.h18
1 files changed, 18 insertions, 0 deletions
diff --git a/ring.h b/ring.h
index f618a35..7590223 100644
--- a/ring.h
+++ b/ring.h
@@ -45,6 +45,7 @@ struct ring {
union {
struct tpacket_req layout;
struct tpacket_req3 layout3;
+ uint8_t raw;
};
};
@@ -113,6 +114,18 @@ static inline void __set_sockopt_tpacket(int sock, int val)
panic("Cannot set tpacketv2!\n");
}
+static inline int __get_sockopt_tpacket(int sock)
+{
+ int val, ret;
+ socklen_t len = sizeof(val);
+
+ ret = getsockopt(sock, SOL_PACKET, PACKET_VERSION, &val, &len);
+ if (ret)
+ panic("Cannot set tpacketv2!\n");
+
+ return val;
+}
+
static inline void set_sockopt_tpacket_v2(int sock)
{
__set_sockopt_tpacket(sock, TPACKET_V2);
@@ -123,4 +136,9 @@ static inline void set_sockopt_tpacket_v3(int sock)
__set_sockopt_tpacket(sock, TPACKET_V3);
}
+static inline int get_sockopt_tpacket(int sock)
+{
+ return __get_sockopt_tpacket(sock);
+}
+
#endif /* RING_H */