aboutsummaryrefslogtreecommitdiffstats
path: root/net/decnet
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2015-09-15 21:04:16 -0400
committerDavid S. Miller <davem@davemloft.net>2015-09-17 20:18:37 -0400
commit29a26a56803855a79dbd028cd61abee56237d6e5 (patch)
tree89fb3a95216d44417577e218a967ede09d676922 /net/decnet
parent04eb44890e5bb3cc855e5c0f18a05eb7311364b7 (diff)
netfilter: Pass struct net into the netfilter hooks
Pass a network namespace parameter into the netfilter hooks. At the call site of the netfilter hooks the path a packet is taking through the network stack is well known which allows the network namespace to be easily and reliabily. This allows the replacement of magic code like "dev_net(state->in?:state->out)" that appears at the start of most netfilter hooks with "state->net". In almost all cases the network namespace passed in is derived from the first network device passed in, guaranteeing those paths will not see any changes in practice. The exceptions are: xfrm/xfrm_output.c:xfrm_output_resume() xs_net(skb_dst(skb)->xfrm) ipvs/ip_vs_xmit.c:ip_vs_nat_send_or_cont() ip_vs_conn_net(cp) ipvs/ip_vs_xmit.c:ip_vs_send_or_cont() ip_vs_conn_net(cp) ipv4/raw.c:raw_send_hdrinc() sock_net(sk) ipv6/ip6_output.c:ip6_xmit() sock_net(sk) ipv6/ndisc.c:ndisc_send_skb() dev_net(skb->dev) not dev_net(dst->dev) ipv6/raw.c:raw6_send_hdrinc() sock_net(sk) br_netfilter_hooks.c:br_nf_pre_routing_finish() dev_net(skb->dev) before skb->dev is set to nf_bridge->physindev In all cases these exceptions seem to be a better expression for the network namespace the packet is being processed in then the historic "dev_net(in?in:out)". I am documenting them in case something odd pops up and someone starts trying to track down what happened. Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/decnet')
-rw-r--r--net/decnet/dn_neigh.c15
-rw-r--r--net/decnet/dn_nsp_in.c4
-rw-r--r--net/decnet/dn_route.c24
3 files changed, 23 insertions, 20 deletions
diff --git a/net/decnet/dn_neigh.c b/net/decnet/dn_neigh.c
index 4507b188fc51..305ab2fe25cd 100644
--- a/net/decnet/dn_neigh.c
+++ b/net/decnet/dn_neigh.c
@@ -246,8 +246,9 @@ static int dn_long_output(struct neighbour *neigh, struct sock *sk,
246 246
247 skb_reset_network_header(skb); 247 skb_reset_network_header(skb);
248 248
249 return NF_HOOK(NFPROTO_DECNET, NF_DN_POST_ROUTING, sk, skb, 249 return NF_HOOK(NFPROTO_DECNET, NF_DN_POST_ROUTING,
250 NULL, neigh->dev, dn_neigh_output_packet); 250 &init_net, sk, skb, NULL, neigh->dev,
251 dn_neigh_output_packet);
251} 252}
252 253
253/* 254/*
@@ -286,8 +287,9 @@ static int dn_short_output(struct neighbour *neigh, struct sock *sk,
286 287
287 skb_reset_network_header(skb); 288 skb_reset_network_header(skb);
288 289
289 return NF_HOOK(NFPROTO_DECNET, NF_DN_POST_ROUTING, sk, skb, 290 return NF_HOOK(NFPROTO_DECNET, NF_DN_POST_ROUTING,
290 NULL, neigh->dev, dn_neigh_output_packet); 291 &init_net, sk, skb, NULL, neigh->dev,
292 dn_neigh_output_packet);
291} 293}
292 294
293/* 295/*
@@ -327,8 +329,9 @@ static int dn_phase3_output(struct neighbour *neigh, struct sock *sk,
327 329
328 skb_reset_network_header(skb); 330 skb_reset_network_header(skb);
329 331
330 return NF_HOOK(NFPROTO_DECNET, NF_DN_POST_ROUTING, sk, skb, 332 return NF_HOOK(NFPROTO_DECNET, NF_DN_POST_ROUTING,
331 NULL, neigh->dev, dn_neigh_output_packet); 333 &init_net, sk, skb, NULL, neigh->dev,
334 dn_neigh_output_packet);
332} 335}
333 336
334int dn_to_neigh_output(struct sock *sk, struct sk_buff *skb) 337int dn_to_neigh_output(struct sock *sk, struct sk_buff *skb)
diff --git a/net/decnet/dn_nsp_in.c b/net/decnet/dn_nsp_in.c
index a321eac9fd0c..e7b0605ca34a 100644
--- a/net/decnet/dn_nsp_in.c
+++ b/net/decnet/dn_nsp_in.c
@@ -814,8 +814,8 @@ free_out:
814 814
815int dn_nsp_rx(struct sk_buff *skb) 815int dn_nsp_rx(struct sk_buff *skb)
816{ 816{
817 return NF_HOOK(NFPROTO_DECNET, NF_DN_LOCAL_IN, NULL, skb, 817 return NF_HOOK(NFPROTO_DECNET, NF_DN_LOCAL_IN,
818 skb->dev, NULL, 818 &init_net, NULL, skb, skb->dev, NULL,
819 dn_nsp_rx_packet); 819 dn_nsp_rx_packet);
820} 820}
821 821
diff --git a/net/decnet/dn_route.c b/net/decnet/dn_route.c
index 03227ffd19ce..fefcd2e85ef9 100644
--- a/net/decnet/dn_route.c
+++ b/net/decnet/dn_route.c
@@ -573,8 +573,8 @@ static int dn_route_rx_long(struct sk_buff *skb)
573 ptr++; 573 ptr++;
574 cb->hops = *ptr++; /* Visit Count */ 574 cb->hops = *ptr++; /* Visit Count */
575 575
576 return NF_HOOK(NFPROTO_DECNET, NF_DN_PRE_ROUTING, NULL, skb, 576 return NF_HOOK(NFPROTO_DECNET, NF_DN_PRE_ROUTING,
577 skb->dev, NULL, 577 &init_net, NULL, skb, skb->dev, NULL,
578 dn_route_rx_packet); 578 dn_route_rx_packet);
579 579
580drop_it: 580drop_it:
@@ -601,8 +601,8 @@ static int dn_route_rx_short(struct sk_buff *skb)
601 ptr += 2; 601 ptr += 2;
602 cb->hops = *ptr & 0x3f; 602 cb->hops = *ptr & 0x3f;
603 603
604 return NF_HOOK(NFPROTO_DECNET, NF_DN_PRE_ROUTING, NULL, skb, 604 return NF_HOOK(NFPROTO_DECNET, NF_DN_PRE_ROUTING,
605 skb->dev, NULL, 605 &init_net, NULL, skb, skb->dev, NULL,
606 dn_route_rx_packet); 606 dn_route_rx_packet);
607 607
608drop_it: 608drop_it:
@@ -706,22 +706,22 @@ int dn_route_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type
706 switch (flags & DN_RT_CNTL_MSK) { 706 switch (flags & DN_RT_CNTL_MSK) {
707 case DN_RT_PKT_HELO: 707 case DN_RT_PKT_HELO:
708 return NF_HOOK(NFPROTO_DECNET, NF_DN_HELLO, 708 return NF_HOOK(NFPROTO_DECNET, NF_DN_HELLO,
709 NULL, skb, skb->dev, NULL, 709 &init_net, NULL, skb, skb->dev, NULL,
710 dn_route_ptp_hello); 710 dn_route_ptp_hello);
711 711
712 case DN_RT_PKT_L1RT: 712 case DN_RT_PKT_L1RT:
713 case DN_RT_PKT_L2RT: 713 case DN_RT_PKT_L2RT:
714 return NF_HOOK(NFPROTO_DECNET, NF_DN_ROUTE, 714 return NF_HOOK(NFPROTO_DECNET, NF_DN_ROUTE,
715 NULL, skb, skb->dev, NULL, 715 &init_net, NULL, skb, skb->dev, NULL,
716 dn_route_discard); 716 dn_route_discard);
717 case DN_RT_PKT_ERTH: 717 case DN_RT_PKT_ERTH:
718 return NF_HOOK(NFPROTO_DECNET, NF_DN_HELLO, 718 return NF_HOOK(NFPROTO_DECNET, NF_DN_HELLO,
719 NULL, skb, skb->dev, NULL, 719 &init_net, NULL, skb, skb->dev, NULL,
720 dn_neigh_router_hello); 720 dn_neigh_router_hello);
721 721
722 case DN_RT_PKT_EEDH: 722 case DN_RT_PKT_EEDH:
723 return NF_HOOK(NFPROTO_DECNET, NF_DN_HELLO, 723 return NF_HOOK(NFPROTO_DECNET, NF_DN_HELLO,
724 NULL, skb, skb->dev, NULL, 724 &init_net, NULL, skb, skb->dev, NULL,
725 dn_neigh_endnode_hello); 725 dn_neigh_endnode_hello);
726 } 726 }
727 } else { 727 } else {
@@ -770,8 +770,8 @@ static int dn_output(struct sock *sk, struct sk_buff *skb)
770 cb->rt_flags |= DN_RT_F_IE; 770 cb->rt_flags |= DN_RT_F_IE;
771 cb->hops = 0; 771 cb->hops = 0;
772 772
773 return NF_HOOK(NFPROTO_DECNET, NF_DN_LOCAL_OUT, sk, skb, 773 return NF_HOOK(NFPROTO_DECNET, NF_DN_LOCAL_OUT,
774 NULL, dev, 774 &init_net, sk, skb, NULL, dev,
775 dn_to_neigh_output); 775 dn_to_neigh_output);
776 776
777error: 777error:
@@ -819,8 +819,8 @@ static int dn_forward(struct sk_buff *skb)
819 if (rt->rt_flags & RTCF_DOREDIRECT) 819 if (rt->rt_flags & RTCF_DOREDIRECT)
820 cb->rt_flags |= DN_RT_F_IE; 820 cb->rt_flags |= DN_RT_F_IE;
821 821
822 return NF_HOOK(NFPROTO_DECNET, NF_DN_FORWARD, NULL, skb, 822 return NF_HOOK(NFPROTO_DECNET, NF_DN_FORWARD,
823 dev, skb->dev, 823 &init_net, NULL, skb, dev, skb->dev,
824 dn_to_neigh_output); 824 dn_to_neigh_output);
825 825
826drop: 826drop: