]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - net/packet/af_packet.c
packet: minor: add generic tpacket_uhdr to access packet headers
[karo-tx-linux.git] / net / packet / af_packet.c
index 77d71f84758c01375fc148faedfa95ee7dc31d16..e566b793f07c3ac7aff12178bcda82936aa5209b 100644 (file)
@@ -158,10 +158,16 @@ struct packet_mreq_max {
        unsigned char   mr_address[MAX_ADDR_LEN];
 };
 
+union tpacket_uhdr {
+       struct tpacket_hdr  *h1;
+       struct tpacket2_hdr *h2;
+       struct tpacket3_hdr *h3;
+       void *raw;
+};
+
 static int packet_set_ring(struct sock *sk, union tpacket_req_u *req_u,
                int closing, int tx_ring);
 
-
 #define V3_ALIGNMENT   (8)
 
 #define BLK_HDR_LEN    (ALIGN(sizeof(struct tpacket_block_desc), V3_ALIGNMENT))
@@ -290,11 +296,7 @@ static inline __pure struct page *pgv_to_page(void *addr)
 
 static void __packet_set_status(struct packet_sock *po, void *frame, int status)
 {
-       union {
-               struct tpacket_hdr *h1;
-               struct tpacket2_hdr *h2;
-               void *raw;
-       } h;
+       union tpacket_uhdr h;
 
        h.raw = frame;
        switch (po->tp_version) {
@@ -317,11 +319,7 @@ static void __packet_set_status(struct packet_sock *po, void *frame, int status)
 
 static int __packet_get_status(struct packet_sock *po, void *frame)
 {
-       union {
-               struct tpacket_hdr *h1;
-               struct tpacket2_hdr *h2;
-               void *raw;
-       } h;
+       union tpacket_uhdr h;
 
        smp_rmb();
 
@@ -347,11 +345,7 @@ static void *packet_lookup_frame(struct packet_sock *po,
                int status)
 {
        unsigned int pg_vec_pos, frame_offset;
-       union {
-               struct tpacket_hdr *h1;
-               struct tpacket2_hdr *h2;
-               void *raw;
-       } h;
+       union tpacket_uhdr h;
 
        pg_vec_pos = position / rb->frames_per_block;
        frame_offset = position % rb->frames_per_block;
@@ -1669,12 +1663,7 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev,
        struct sock *sk;
        struct packet_sock *po;
        struct sockaddr_ll *sll;
-       union {
-               struct tpacket_hdr *h1;
-               struct tpacket2_hdr *h2;
-               struct tpacket3_hdr *h3;
-               void *raw;
-       } h;
+       union tpacket_uhdr h;
        u8 *skb_head = skb->data;
        int skb_len = skb->len;
        unsigned int snaplen, res;
@@ -1909,11 +1898,7 @@ static int tpacket_fill_skb(struct packet_sock *po, struct sk_buff *skb,
                void *frame, struct net_device *dev, int size_max,
                __be16 proto, unsigned char *addr, int hlen)
 {
-       union {
-               struct tpacket_hdr *h1;
-               struct tpacket2_hdr *h2;
-               void *raw;
-       } ph;
+       union tpacket_uhdr ph;
        int to_write, offset, len, tp_len, nr_frags, len_max;
        struct socket *sock = po->sk.sk_socket;
        struct page *page;