diff options
author | Daniel Borkmann <dborkman@redhat.com> | 2013-05-31 11:18:36 +0200 |
---|---|---|
committer | Daniel Borkmann <dborkman@redhat.com> | 2013-05-31 11:20:01 +0200 |
commit | 2f39b007d5382d01fc424e22b8e1a3681c2bc8cf (patch) | |
tree | b2d7b6bec9932c6bbfec6af8aa016cbd372adf72 /ring.h | |
parent | ed4e3c64dc80bb775f9ecfdd2165297e34e2fb0c (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.h | 18 |
1 files changed, 18 insertions, 0 deletions
@@ -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 */ |