@@ -46,6 +46,7 @@ struct bareudp_dev {
46
46
__be16 port ;
47
47
u16 sport_min ;
48
48
bool multi_proto_mode ;
49
+ bool rx_collect_metadata ;
49
50
struct socket __rcu * sock ;
50
51
struct list_head next ; /* bareudp node on namespace list */
51
52
struct gro_cells gro_cells ;
@@ -125,13 +126,14 @@ static int bareudp_udp_encap_recv(struct sock *sk, struct sk_buff *skb)
125
126
bareudp -> dev -> stats .rx_dropped ++ ;
126
127
goto drop ;
127
128
}
128
-
129
- tun_dst = udp_tun_rx_dst (skb , family , TUNNEL_KEY , 0 , 0 );
130
- if (!tun_dst ) {
131
- bareudp -> dev -> stats .rx_dropped ++ ;
132
- goto drop ;
129
+ if (bareudp -> rx_collect_metadata ) {
130
+ tun_dst = udp_tun_rx_dst (skb , family , TUNNEL_KEY , 0 , 0 );
131
+ if (!tun_dst ) {
132
+ bareudp -> dev -> stats .rx_dropped ++ ;
133
+ goto drop ;
134
+ }
135
+ skb_dst_set (skb , & tun_dst -> dst );
133
136
}
134
- skb_dst_set (skb , & tun_dst -> dst );
135
137
skb -> dev = bareudp -> dev ;
136
138
oiph = skb_network_header (skb );
137
139
skb_reset_network_header (skb );
@@ -575,6 +577,9 @@ static int bareudp2info(struct nlattr *data[], struct bareudp_conf *conf,
575
577
if (data [IFLA_BAREUDP_MULTIPROTO_MODE ])
576
578
conf -> multi_proto_mode = true;
577
579
580
+ if (data [IFLA_BAREUDP_RX_COLLECT_METADATA ])
581
+ conf -> rx_collect_metadata = true;
582
+
578
583
return 0 ;
579
584
}
580
585
@@ -612,6 +617,8 @@ static int bareudp_configure(struct net *net, struct net_device *dev,
612
617
bareudp -> ethertype = conf -> ethertype ;
613
618
bareudp -> sport_min = conf -> sport_min ;
614
619
bareudp -> multi_proto_mode = conf -> multi_proto_mode ;
620
+ bareudp -> rx_collect_metadata = conf -> rx_collect_metadata ;
621
+
615
622
err = register_netdevice (dev );
616
623
if (err )
617
624
return err ;
@@ -669,6 +676,7 @@ static size_t bareudp_get_size(const struct net_device *dev)
669
676
nla_total_size (sizeof (__be16 )) + /* IFLA_BAREUDP_ETHERTYPE */
670
677
nla_total_size (sizeof (__u16 )) + /* IFLA_BAREUDP_SRCPORT_MIN */
671
678
nla_total_size (0 ) + /* IFLA_BAREUDP_MULTIPROTO_MODE */
679
+ nla_total_size (0 ) + /* IFLA_BAREUDP_RX_COLLECT_METADATA */
672
680
0 ;
673
681
}
674
682
@@ -685,6 +693,9 @@ static int bareudp_fill_info(struct sk_buff *skb, const struct net_device *dev)
685
693
if (bareudp -> multi_proto_mode &&
686
694
nla_put_flag (skb , IFLA_BAREUDP_MULTIPROTO_MODE ))
687
695
goto nla_put_failure ;
696
+ if (bareudp -> rx_collect_metadata &&
697
+ nla_put_flag (skb , IFLA_BAREUDP_RX_COLLECT_METADATA ))
698
+ goto nla_put_failure ;
688
699
689
700
return 0 ;
690
701
0 commit comments