Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 511c3f92 authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller
Browse files

net: skb->rtable accessor



Define skb_rtable(const struct sk_buff *skb) accessor to get rtable from skb

Delete skb->rtable field

Setting rtable is not allowed, just set dst instead as rtable is an alias.

Signed-off-by: default avatarEric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent dfbf97f3
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -115,7 +115,7 @@ static struct net_device * __init ipddp_init(void)
 */
static int ipddp_xmit(struct sk_buff *skb, struct net_device *dev)
{
	__be32 paddr = ((struct rtable*)skb->dst)->rt_gateway;
	__be32 paddr = skb_rtable(skb)->rt_gateway;
        struct ddpehdr *ddp;
        struct ipddp_route *rt;
        struct atalk_addr *our_addr;
+5 −1
Original line number Diff line number Diff line
@@ -324,7 +324,6 @@ struct sk_buff {

	union {
		struct  dst_entry	*dst;
		struct  rtable		*rtable;
		unsigned long		_skb_dst;
	};
#ifdef CONFIG_XFRM
@@ -427,6 +426,11 @@ extern void skb_dma_unmap(struct device *dev, struct sk_buff *skb,
			  enum dma_data_direction dir);
#endif

static inline struct rtable *skb_rtable(const struct sk_buff *skb)
{
	return (struct rtable *)skb->_skb_dst;
}

extern void kfree_skb(struct sk_buff *skb);
extern void consume_skb(struct sk_buff *skb);
extern void	       __kfree_skb(struct sk_buff *skb);
+1 −1
Original line number Diff line number Diff line
@@ -210,7 +210,7 @@ static inline struct inet_peer *rt_get_peer(struct rtable *rt)

static inline int inet_iif(const struct sk_buff *skb)
{
	return skb->rtable->rt_iif;
	return skb_rtable(skb)->rt_iif;
}

#endif	/* _ROUTE_H */
+15 −10
Original line number Diff line number Diff line
@@ -228,6 +228,7 @@ int nf_bridge_copy_header(struct sk_buff *skb)
static int br_nf_pre_routing_finish_ipv6(struct sk_buff *skb)
{
	struct nf_bridge_info *nf_bridge = skb->nf_bridge;
	struct rtable *rt;

	if (nf_bridge->mask & BRNF_PKT_TYPE) {
		skb->pkt_type = PACKET_OTHERHOST;
@@ -235,12 +236,13 @@ static int br_nf_pre_routing_finish_ipv6(struct sk_buff *skb)
	}
	nf_bridge->mask ^= BRNF_NF_BRIDGE_PREROUTING;

	skb->rtable = bridge_parent_rtable(nf_bridge->physindev);
	if (!skb->rtable) {
	rt = bridge_parent_rtable(nf_bridge->physindev);
	if (!rt) {
		kfree_skb(skb);
		return 0;
	}
	dst_hold(&skb->rtable->u.dst);
	dst_hold(&rt->u.dst);
	skb->dst = &rt->u.dst;

	skb->dev = nf_bridge->physindev;
	nf_bridge_push_encap_header(skb);
@@ -338,6 +340,7 @@ static int br_nf_pre_routing_finish(struct sk_buff *skb)
	struct net_device *dev = skb->dev;
	struct iphdr *iph = ip_hdr(skb);
	struct nf_bridge_info *nf_bridge = skb->nf_bridge;
	struct rtable *rt;
	int err;

	if (nf_bridge->mask & BRNF_PKT_TYPE) {
@@ -347,7 +350,6 @@ static int br_nf_pre_routing_finish(struct sk_buff *skb)
	nf_bridge->mask ^= BRNF_NF_BRIDGE_PREROUTING;
	if (dnat_took_place(skb)) {
		if ((err = ip_route_input(skb, iph->daddr, iph->saddr, iph->tos, dev))) {
			struct rtable *rt;
			struct flowi fl = {
				.nl_u = {
					.ip4_u = {
@@ -404,12 +406,13 @@ bridged_dnat:
			skb->pkt_type = PACKET_HOST;
		}
	} else {
		skb->rtable = bridge_parent_rtable(nf_bridge->physindev);
		if (!skb->rtable) {
		rt = bridge_parent_rtable(nf_bridge->physindev);
		if (!rt) {
			kfree_skb(skb);
			return 0;
		}
		dst_hold(&skb->rtable->u.dst);
		dst_hold(&rt->u.dst);
		skb->dst = &rt->u.dst;
	}

	skb->dev = nf_bridge->physindev;
@@ -628,9 +631,11 @@ static unsigned int br_nf_local_in(unsigned int hook, struct sk_buff *skb,
				   const struct net_device *out,
				   int (*okfn)(struct sk_buff *))
{
	if (skb->rtable && skb->rtable == bridge_parent_rtable(in)) {
		dst_release(&skb->rtable->u.dst);
		skb->rtable = NULL;
	struct rtable *rt = skb_rtable(skb);

	if (rt && rt == bridge_parent_rtable(in)) {
		dst_release(&rt->u.dst);
		skb->dst = NULL;
	}

	return NF_ACCEPT;
+3 −3
Original line number Diff line number Diff line
@@ -452,7 +452,7 @@ static struct dst_entry* dccp_v4_route_skb(struct net *net, struct sock *sk,
					   struct sk_buff *skb)
{
	struct rtable *rt;
	struct flowi fl = { .oif = skb->rtable->rt_iif,
	struct flowi fl = { .oif = skb_rtable(skb)->rt_iif,
			    .nl_u = { .ip4_u =
				      { .daddr = ip_hdr(skb)->saddr,
					.saddr = ip_hdr(skb)->daddr,
@@ -514,7 +514,7 @@ static void dccp_v4_ctl_send_reset(struct sock *sk, struct sk_buff *rxskb)
	if (dccp_hdr(rxskb)->dccph_type == DCCP_PKT_RESET)
		return;

	if (rxskb->rtable->rt_type != RTN_LOCAL)
	if (skb_rtable(rxskb)->rt_type != RTN_LOCAL)
		return;

	dst = dccp_v4_route_skb(net, ctl_sk, rxskb);
@@ -567,7 +567,7 @@ int dccp_v4_conn_request(struct sock *sk, struct sk_buff *skb)
	struct dccp_skb_cb *dcb = DCCP_SKB_CB(skb);

	/* Never answer to DCCP_PKT_REQUESTs send to broadcast or multicast */
	if (skb->rtable->rt_flags & (RTCF_BROADCAST | RTCF_MULTICAST))
	if (skb_rtable(skb)->rt_flags & (RTCF_BROADCAST | RTCF_MULTICAST))
		return 0;	/* discard, don't send a reset here */

	if (dccp_bad_service_code(sk, service)) {
Loading