You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
net: skb->dst accessors
Define three accessors to get/set dst attached to a skb struct dst_entry *skb_dst(const struct sk_buff *skb) void skb_dst_set(struct sk_buff *skb, struct dst_entry *dst) void skb_dst_drop(struct sk_buff *skb) This one should replace occurrences of : dst_release(skb->dst) skb->dst = NULL; Delete skb->dst field Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
511c3f92ad
commit
adf30907d6
@@ -1394,8 +1394,8 @@ void ipoib_cm_skb_too_long(struct net_device *dev, struct sk_buff *skb,
|
||||
struct ipoib_dev_priv *priv = netdev_priv(dev);
|
||||
int e = skb_queue_empty(&priv->cm.skb_queue);
|
||||
|
||||
if (skb->dst)
|
||||
skb->dst->ops->update_pmtu(skb->dst, mtu);
|
||||
if (skb_dst(skb))
|
||||
skb_dst(skb)->ops->update_pmtu(skb_dst(skb), mtu);
|
||||
|
||||
skb_queue_tail(&priv->cm.skb_queue, skb);
|
||||
if (e)
|
||||
|
||||
@@ -561,7 +561,7 @@ static void neigh_add_path(struct sk_buff *skb, struct net_device *dev)
|
||||
struct ipoib_neigh *neigh;
|
||||
unsigned long flags;
|
||||
|
||||
neigh = ipoib_neigh_alloc(skb->dst->neighbour, skb->dev);
|
||||
neigh = ipoib_neigh_alloc(skb_dst(skb)->neighbour, skb->dev);
|
||||
if (!neigh) {
|
||||
++dev->stats.tx_dropped;
|
||||
dev_kfree_skb_any(skb);
|
||||
@@ -570,9 +570,9 @@ static void neigh_add_path(struct sk_buff *skb, struct net_device *dev)
|
||||
|
||||
spin_lock_irqsave(&priv->lock, flags);
|
||||
|
||||
path = __path_find(dev, skb->dst->neighbour->ha + 4);
|
||||
path = __path_find(dev, skb_dst(skb)->neighbour->ha + 4);
|
||||
if (!path) {
|
||||
path = path_rec_create(dev, skb->dst->neighbour->ha + 4);
|
||||
path = path_rec_create(dev, skb_dst(skb)->neighbour->ha + 4);
|
||||
if (!path)
|
||||
goto err_path;
|
||||
|
||||
@@ -605,7 +605,7 @@ static void neigh_add_path(struct sk_buff *skb, struct net_device *dev)
|
||||
goto err_drop;
|
||||
}
|
||||
} else
|
||||
ipoib_send(dev, skb, path->ah, IPOIB_QPN(skb->dst->neighbour->ha));
|
||||
ipoib_send(dev, skb, path->ah, IPOIB_QPN(skb_dst(skb)->neighbour->ha));
|
||||
} else {
|
||||
neigh->ah = NULL;
|
||||
|
||||
@@ -635,15 +635,15 @@ static void ipoib_path_lookup(struct sk_buff *skb, struct net_device *dev)
|
||||
struct ipoib_dev_priv *priv = netdev_priv(skb->dev);
|
||||
|
||||
/* Look up path record for unicasts */
|
||||
if (skb->dst->neighbour->ha[4] != 0xff) {
|
||||
if (skb_dst(skb)->neighbour->ha[4] != 0xff) {
|
||||
neigh_add_path(skb, dev);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Add in the P_Key for multicasts */
|
||||
skb->dst->neighbour->ha[8] = (priv->pkey >> 8) & 0xff;
|
||||
skb->dst->neighbour->ha[9] = priv->pkey & 0xff;
|
||||
ipoib_mcast_send(dev, skb->dst->neighbour->ha + 4, skb);
|
||||
skb_dst(skb)->neighbour->ha[8] = (priv->pkey >> 8) & 0xff;
|
||||
skb_dst(skb)->neighbour->ha[9] = priv->pkey & 0xff;
|
||||
ipoib_mcast_send(dev, skb_dst(skb)->neighbour->ha + 4, skb);
|
||||
}
|
||||
|
||||
static void unicast_arp_send(struct sk_buff *skb, struct net_device *dev,
|
||||
@@ -708,16 +708,16 @@ static int ipoib_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
struct ipoib_neigh *neigh;
|
||||
unsigned long flags;
|
||||
|
||||
if (likely(skb->dst && skb->dst->neighbour)) {
|
||||
if (unlikely(!*to_ipoib_neigh(skb->dst->neighbour))) {
|
||||
if (likely(skb_dst(skb) && skb_dst(skb)->neighbour)) {
|
||||
if (unlikely(!*to_ipoib_neigh(skb_dst(skb)->neighbour))) {
|
||||
ipoib_path_lookup(skb, dev);
|
||||
return NETDEV_TX_OK;
|
||||
}
|
||||
|
||||
neigh = *to_ipoib_neigh(skb->dst->neighbour);
|
||||
neigh = *to_ipoib_neigh(skb_dst(skb)->neighbour);
|
||||
|
||||
if (unlikely((memcmp(&neigh->dgid.raw,
|
||||
skb->dst->neighbour->ha + 4,
|
||||
skb_dst(skb)->neighbour->ha + 4,
|
||||
sizeof(union ib_gid))) ||
|
||||
(neigh->dev != dev))) {
|
||||
spin_lock_irqsave(&priv->lock, flags);
|
||||
@@ -743,7 +743,7 @@ static int ipoib_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
return NETDEV_TX_OK;
|
||||
}
|
||||
} else if (neigh->ah) {
|
||||
ipoib_send(dev, skb, neigh->ah, IPOIB_QPN(skb->dst->neighbour->ha));
|
||||
ipoib_send(dev, skb, neigh->ah, IPOIB_QPN(skb_dst(skb)->neighbour->ha));
|
||||
return NETDEV_TX_OK;
|
||||
}
|
||||
|
||||
@@ -772,7 +772,7 @@ static int ipoib_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
if ((be16_to_cpup((__be16 *) skb->data) != ETH_P_ARP) &&
|
||||
(be16_to_cpup((__be16 *) skb->data) != ETH_P_RARP)) {
|
||||
ipoib_warn(priv, "Unicast, no %s: type %04x, QPN %06x %pI6\n",
|
||||
skb->dst ? "neigh" : "dst",
|
||||
skb_dst(skb) ? "neigh" : "dst",
|
||||
be16_to_cpup((__be16 *) skb->data),
|
||||
IPOIB_QPN(phdr->hwaddr),
|
||||
phdr->hwaddr + 4);
|
||||
@@ -817,7 +817,7 @@ static int ipoib_hard_header(struct sk_buff *skb,
|
||||
* destination address onto the front of the skb so we can
|
||||
* figure out where to send the packet later.
|
||||
*/
|
||||
if ((!skb->dst || !skb->dst->neighbour) && daddr) {
|
||||
if ((!skb_dst(skb) || !skb_dst(skb)->neighbour) && daddr) {
|
||||
struct ipoib_pseudoheader *phdr =
|
||||
(struct ipoib_pseudoheader *) skb_push(skb, sizeof *phdr);
|
||||
memcpy(phdr->hwaddr, daddr, INFINIBAND_ALEN);
|
||||
|
||||
@@ -261,7 +261,7 @@ static int ipoib_mcast_join_finish(struct ipoib_mcast *mcast,
|
||||
|
||||
skb->dev = dev;
|
||||
|
||||
if (!skb->dst || !skb->dst->neighbour) {
|
||||
if (!skb_dst(skb) || !skb_dst(skb)->neighbour) {
|
||||
/* put pseudoheader back on for next time */
|
||||
skb_push(skb, sizeof (struct ipoib_pseudoheader));
|
||||
}
|
||||
@@ -707,10 +707,10 @@ void ipoib_mcast_send(struct net_device *dev, void *mgid, struct sk_buff *skb)
|
||||
|
||||
out:
|
||||
if (mcast && mcast->ah) {
|
||||
if (skb->dst &&
|
||||
skb->dst->neighbour &&
|
||||
!*to_ipoib_neigh(skb->dst->neighbour)) {
|
||||
struct ipoib_neigh *neigh = ipoib_neigh_alloc(skb->dst->neighbour,
|
||||
if (skb_dst(skb) &&
|
||||
skb_dst(skb)->neighbour &&
|
||||
!*to_ipoib_neigh(skb_dst(skb)->neighbour)) {
|
||||
struct ipoib_neigh *neigh = ipoib_neigh_alloc(skb_dst(skb)->neighbour,
|
||||
skb->dev);
|
||||
|
||||
if (neigh) {
|
||||
|
||||
@@ -433,8 +433,7 @@ static void pppol2tp_recv_dequeue_skb(struct pppol2tp_session *session, struct s
|
||||
* to the inner packet either
|
||||
*/
|
||||
secpath_reset(skb);
|
||||
dst_release(skb->dst);
|
||||
skb->dst = NULL;
|
||||
skb_dst_drop(skb);
|
||||
nf_reset(skb);
|
||||
|
||||
po = pppox_sk(session_sock);
|
||||
@@ -976,7 +975,7 @@ static int pppol2tp_sendmsg(struct kiocb *iocb, struct socket *sock, struct msgh
|
||||
/* Calculate UDP checksum if configured to do so */
|
||||
if (sk_tun->sk_no_check == UDP_CSUM_NOXMIT)
|
||||
skb->ip_summed = CHECKSUM_NONE;
|
||||
else if (!(skb->dst->dev->features & NETIF_F_V4_CSUM)) {
|
||||
else if (!(skb_dst(skb)->dev->features & NETIF_F_V4_CSUM)) {
|
||||
skb->ip_summed = CHECKSUM_COMPLETE;
|
||||
csum = skb_checksum(skb, 0, udp_len, 0);
|
||||
uh->check = csum_tcpudp_magic(inet->saddr, inet->daddr,
|
||||
@@ -1172,14 +1171,14 @@ static int pppol2tp_xmit(struct ppp_channel *chan, struct sk_buff *skb)
|
||||
nf_reset(skb);
|
||||
|
||||
/* Get routing info from the tunnel socket */
|
||||
dst_release(skb->dst);
|
||||
skb->dst = dst_clone(__sk_dst_get(sk_tun));
|
||||
skb_dst_drop(skb);
|
||||
skb_dst_set(skb, dst_clone(__sk_dst_get(sk_tun)));
|
||||
pppol2tp_skb_set_owner_w(skb, sk_tun);
|
||||
|
||||
/* Calculate UDP checksum if configured to do so */
|
||||
if (sk_tun->sk_no_check == UDP_CSUM_NOXMIT)
|
||||
skb->ip_summed = CHECKSUM_NONE;
|
||||
else if (!(skb->dst->dev->features & NETIF_F_V4_CSUM)) {
|
||||
else if (!(skb_dst(skb)->dev->features & NETIF_F_V4_CSUM)) {
|
||||
skb->ip_summed = CHECKSUM_COMPLETE;
|
||||
csum = skb_checksum(skb, 0, udp_len, 0);
|
||||
uh->check = csum_tcpudp_magic(inet->saddr, inet->daddr,
|
||||
|
||||
@@ -2937,8 +2937,8 @@ int qeth_get_cast_type(struct qeth_card *card, struct sk_buff *skb)
|
||||
if (card->info.type == QETH_CARD_TYPE_OSN)
|
||||
return cast_type;
|
||||
|
||||
if (skb->dst && skb->dst->neighbour) {
|
||||
cast_type = skb->dst->neighbour->type;
|
||||
if (skb_dst(skb) && skb_dst(skb)->neighbour) {
|
||||
cast_type = skb_dst(skb)->neighbour->type;
|
||||
if ((cast_type == RTN_BROADCAST) ||
|
||||
(cast_type == RTN_MULTICAST) ||
|
||||
(cast_type == RTN_ANYCAST))
|
||||
|
||||
@@ -2549,9 +2549,9 @@ static void qeth_l3_fill_header(struct qeth_card *card, struct qeth_hdr *hdr,
|
||||
/* IPv4 */
|
||||
hdr->hdr.l3.flags = qeth_l3_get_qeth_hdr_flags4(cast_type);
|
||||
memset(hdr->hdr.l3.dest_addr, 0, 12);
|
||||
if ((skb->dst) && (skb->dst->neighbour)) {
|
||||
if ((skb_dst(skb)) && (skb_dst(skb)->neighbour)) {
|
||||
*((u32 *) (&hdr->hdr.l3.dest_addr[12])) =
|
||||
*((u32 *) skb->dst->neighbour->primary_key);
|
||||
*((u32 *) skb_dst(skb)->neighbour->primary_key);
|
||||
} else {
|
||||
/* fill in destination address used in ip header */
|
||||
*((u32 *) (&hdr->hdr.l3.dest_addr[12])) =
|
||||
@@ -2562,9 +2562,9 @@ static void qeth_l3_fill_header(struct qeth_card *card, struct qeth_hdr *hdr,
|
||||
hdr->hdr.l3.flags = qeth_l3_get_qeth_hdr_flags6(cast_type);
|
||||
if (card->info.type == QETH_CARD_TYPE_IQD)
|
||||
hdr->hdr.l3.flags &= ~QETH_HDR_PASSTHRU;
|
||||
if ((skb->dst) && (skb->dst->neighbour)) {
|
||||
if ((skb_dst(skb)) && (skb_dst(skb)->neighbour)) {
|
||||
memcpy(hdr->hdr.l3.dest_addr,
|
||||
skb->dst->neighbour->primary_key, 16);
|
||||
skb_dst(skb)->neighbour->primary_key, 16);
|
||||
} else {
|
||||
/* fill in destination address used in ip header */
|
||||
memcpy(hdr->hdr.l3.dest_addr,
|
||||
|
||||
+11
-2
@@ -323,7 +323,6 @@ struct sk_buff {
|
||||
struct net_device *dev;
|
||||
|
||||
union {
|
||||
struct dst_entry *dst;
|
||||
unsigned long _skb_dst;
|
||||
};
|
||||
#ifdef CONFIG_XFRM
|
||||
@@ -426,9 +425,19 @@ extern void skb_dma_unmap(struct device *dev, struct sk_buff *skb,
|
||||
enum dma_data_direction dir);
|
||||
#endif
|
||||
|
||||
static inline struct dst_entry *skb_dst(const struct sk_buff *skb)
|
||||
{
|
||||
return (struct dst_entry *)skb->_skb_dst;
|
||||
}
|
||||
|
||||
static inline void skb_dst_set(struct sk_buff *skb, struct dst_entry *dst)
|
||||
{
|
||||
skb->_skb_dst = (unsigned long)dst;
|
||||
}
|
||||
|
||||
static inline struct rtable *skb_rtable(const struct sk_buff *skb)
|
||||
{
|
||||
return (struct rtable *)skb->_skb_dst;
|
||||
return (struct rtable *)skb_dst(skb);
|
||||
}
|
||||
|
||||
extern void kfree_skb(struct sk_buff *skb);
|
||||
|
||||
+9
-3
@@ -195,6 +195,12 @@ struct dst_entry * dst_clone(struct dst_entry * dst)
|
||||
}
|
||||
|
||||
extern void dst_release(struct dst_entry *dst);
|
||||
static inline void skb_dst_drop(struct sk_buff *skb)
|
||||
{
|
||||
if (skb->_skb_dst)
|
||||
dst_release(skb_dst(skb));
|
||||
skb->_skb_dst = 0UL;
|
||||
}
|
||||
|
||||
/* Children define the path of the packet through the
|
||||
* Linux networking. Thus, destinations are stackable.
|
||||
@@ -246,7 +252,7 @@ static inline void dst_negative_advice(struct dst_entry **dst_p)
|
||||
|
||||
static inline void dst_link_failure(struct sk_buff *skb)
|
||||
{
|
||||
struct dst_entry * dst = skb->dst;
|
||||
struct dst_entry *dst = skb_dst(skb);
|
||||
if (dst && dst->ops && dst->ops->link_failure)
|
||||
dst->ops->link_failure(skb);
|
||||
}
|
||||
@@ -265,13 +271,13 @@ static inline void dst_set_expires(struct dst_entry *dst, int timeout)
|
||||
/* Output packet to network from transport. */
|
||||
static inline int dst_output(struct sk_buff *skb)
|
||||
{
|
||||
return skb->dst->output(skb);
|
||||
return skb_dst(skb)->output(skb);
|
||||
}
|
||||
|
||||
/* Input packet from network to transport. */
|
||||
static inline int dst_input(struct sk_buff *skb)
|
||||
{
|
||||
return skb->dst->input(skb);
|
||||
return skb_dst(skb)->input(skb);
|
||||
}
|
||||
|
||||
static inline struct dst_entry *dst_check(struct dst_entry *dst, u32 cookie)
|
||||
|
||||
@@ -100,7 +100,7 @@ static inline struct sock *__inet6_lookup_skb(struct inet_hashinfo *hashinfo,
|
||||
|
||||
if (unlikely(sk = skb_steal_sock(skb)))
|
||||
return sk;
|
||||
else return __inet6_lookup(dev_net(skb->dst->dev), hashinfo,
|
||||
else return __inet6_lookup(dev_net(skb_dst(skb)->dev), hashinfo,
|
||||
&ipv6_hdr(skb)->saddr, sport,
|
||||
&ipv6_hdr(skb)->daddr, ntohs(dport),
|
||||
inet6_iif(skb));
|
||||
|
||||
@@ -385,7 +385,7 @@ static inline struct sock *__inet_lookup_skb(struct inet_hashinfo *hashinfo,
|
||||
if (unlikely(sk = skb_steal_sock(skb)))
|
||||
return sk;
|
||||
else
|
||||
return __inet_lookup(dev_net(skb->dst->dev), hashinfo,
|
||||
return __inet_lookup(dev_net(skb_dst(skb)->dev), hashinfo,
|
||||
iph->saddr, sport,
|
||||
iph->daddr, dport, inet_iif(skb));
|
||||
}
|
||||
|
||||
@@ -142,7 +142,7 @@ static inline void ip6_dst_store(struct sock *sk, struct dst_entry *dst,
|
||||
|
||||
static inline int ipv6_unicast_destination(struct sk_buff *skb)
|
||||
{
|
||||
struct rt6_info *rt = (struct rt6_info *) skb->dst;
|
||||
struct rt6_info *rt = (struct rt6_info *) skb_dst(skb);
|
||||
|
||||
return rt->rt6i_flags & RTF_LOCAL;
|
||||
}
|
||||
|
||||
+2
-2
@@ -994,7 +994,7 @@ static inline int __xfrm_policy_check2(struct sock *sk, int dir,
|
||||
return __xfrm_policy_check(sk, ndir, skb, family);
|
||||
|
||||
return (!net->xfrm.policy_count[dir] && !skb->sp) ||
|
||||
(skb->dst->flags & DST_NOPOLICY) ||
|
||||
(skb_dst(skb)->flags & DST_NOPOLICY) ||
|
||||
__xfrm_policy_check(sk, ndir, skb, family);
|
||||
}
|
||||
|
||||
@@ -1048,7 +1048,7 @@ static inline int xfrm_route_forward(struct sk_buff *skb, unsigned short family)
|
||||
struct net *net = dev_net(skb->dev);
|
||||
|
||||
return !net->xfrm.policy_count[XFRM_POLICY_OUT] ||
|
||||
(skb->dst->flags & DST_NOXFRM) ||
|
||||
(skb_dst(skb)->flags & DST_NOXFRM) ||
|
||||
__xfrm_route_forward(skb, family);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -228,7 +228,7 @@ static int br2684_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
struct br2684_dev *brdev = BRPRIV(dev);
|
||||
struct br2684_vcc *brvcc;
|
||||
|
||||
pr_debug("br2684_start_xmit, skb->dst=%p\n", skb->dst);
|
||||
pr_debug("br2684_start_xmit, skb_dst(skb)=%p\n", skb_dst(skb));
|
||||
read_lock(&devs_lock);
|
||||
brvcc = pick_outgoing_vcc(skb, brdev);
|
||||
if (brvcc == NULL) {
|
||||
|
||||
+7
-7
@@ -369,16 +369,16 @@ static int clip_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
unsigned long flags;
|
||||
|
||||
pr_debug("clip_start_xmit (skb %p)\n", skb);
|
||||
if (!skb->dst) {
|
||||
printk(KERN_ERR "clip_start_xmit: skb->dst == NULL\n");
|
||||
if (!skb_dst(skb)) {
|
||||
printk(KERN_ERR "clip_start_xmit: skb_dst(skb) == NULL\n");
|
||||
dev_kfree_skb(skb);
|
||||
dev->stats.tx_dropped++;
|
||||
return 0;
|
||||
}
|
||||
if (!skb->dst->neighbour) {
|
||||
if (!skb_dst(skb)->neighbour) {
|
||||
#if 0
|
||||
skb->dst->neighbour = clip_find_neighbour(skb->dst, 1);
|
||||
if (!skb->dst->neighbour) {
|
||||
skb_dst(skb)->neighbour = clip_find_neighbour(skb_dst(skb), 1);
|
||||
if (!skb_dst(skb)->neighbour) {
|
||||
dev_kfree_skb(skb); /* lost that one */
|
||||
dev->stats.tx_dropped++;
|
||||
return 0;
|
||||
@@ -389,7 +389,7 @@ static int clip_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
dev->stats.tx_dropped++;
|
||||
return 0;
|
||||
}
|
||||
entry = NEIGH2ENTRY(skb->dst->neighbour);
|
||||
entry = NEIGH2ENTRY(skb_dst(skb)->neighbour);
|
||||
if (!entry->vccs) {
|
||||
if (time_after(jiffies, entry->expires)) {
|
||||
/* should be resolved */
|
||||
@@ -406,7 +406,7 @@ static int clip_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
}
|
||||
pr_debug("neigh %p, vccs %p\n", entry, entry->vccs);
|
||||
ATM_SKB(skb)->vcc = vcc = entry->vccs->vcc;
|
||||
pr_debug("using neighbour %p, vcc %p\n", skb->dst->neighbour, vcc);
|
||||
pr_debug("using neighbour %p, vcc %p\n", skb_dst(skb)->neighbour, vcc);
|
||||
if (entry->vccs->encap) {
|
||||
void *here;
|
||||
|
||||
|
||||
@@ -242,7 +242,7 @@ static int br_nf_pre_routing_finish_ipv6(struct sk_buff *skb)
|
||||
return 0;
|
||||
}
|
||||
dst_hold(&rt->u.dst);
|
||||
skb->dst = &rt->u.dst;
|
||||
skb_dst_set(skb, &rt->u.dst);
|
||||
|
||||
skb->dev = nf_bridge->physindev;
|
||||
nf_bridge_push_encap_header(skb);
|
||||
@@ -322,7 +322,7 @@ static int br_nf_pre_routing_finish_bridge(struct sk_buff *skb)
|
||||
|
||||
skb->dev = bridge_parent(skb->dev);
|
||||
if (skb->dev) {
|
||||
struct dst_entry *dst = skb->dst;
|
||||
struct dst_entry *dst = skb_dst(skb);
|
||||
|
||||
nf_bridge_pull_encap_header(skb);
|
||||
|
||||
@@ -375,7 +375,7 @@ static int br_nf_pre_routing_finish(struct sk_buff *skb)
|
||||
/* - Bridged-and-DNAT'ed traffic doesn't
|
||||
* require ip_forwarding. */
|
||||
if (((struct dst_entry *)rt)->dev == dev) {
|
||||
skb->dst = (struct dst_entry *)rt;
|
||||
skb_dst_set(skb, (struct dst_entry *)rt);
|
||||
goto bridged_dnat;
|
||||
}
|
||||
/* we are sure that forwarding is disabled, so printing
|
||||
@@ -389,7 +389,7 @@ free_skb:
|
||||
kfree_skb(skb);
|
||||
return 0;
|
||||
} else {
|
||||
if (skb->dst->dev == dev) {
|
||||
if (skb_dst(skb)->dev == dev) {
|
||||
bridged_dnat:
|
||||
/* Tell br_nf_local_out this is a
|
||||
* bridged frame */
|
||||
@@ -412,7 +412,7 @@ bridged_dnat:
|
||||
return 0;
|
||||
}
|
||||
dst_hold(&rt->u.dst);
|
||||
skb->dst = &rt->u.dst;
|
||||
skb_dst_set(skb, &rt->u.dst);
|
||||
}
|
||||
|
||||
skb->dev = nf_bridge->physindev;
|
||||
@@ -633,10 +633,8 @@ static unsigned int br_nf_local_in(unsigned int hook, struct sk_buff *skb,
|
||||
{
|
||||
struct rtable *rt = skb_rtable(skb);
|
||||
|
||||
if (rt && rt == bridge_parent_rtable(in)) {
|
||||
dst_release(&rt->u.dst);
|
||||
skb->dst = NULL;
|
||||
}
|
||||
if (rt && rt == bridge_parent_rtable(in))
|
||||
skb_dst_drop(skb);
|
||||
|
||||
return NF_ACCEPT;
|
||||
}
|
||||
@@ -851,7 +849,7 @@ static unsigned int br_nf_post_routing(unsigned int hook, struct sk_buff *skb,
|
||||
return NF_ACCEPT;
|
||||
|
||||
#ifdef CONFIG_NETFILTER_DEBUG
|
||||
if (skb->dst == NULL) {
|
||||
if (skb_dst(skb) == NULL) {
|
||||
printk(KERN_INFO "br_netfilter post_routing: skb->dst == NULL\n");
|
||||
goto print_error;
|
||||
}
|
||||
|
||||
+3
-4
@@ -1693,10 +1693,9 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
|
||||
* If device doesnt need skb->dst, release it right now while
|
||||
* its hot in this cpu cache
|
||||
*/
|
||||
if ((dev->priv_flags & IFF_XMIT_DST_RELEASE) && skb->dst) {
|
||||
dst_release(skb->dst);
|
||||
skb->dst = NULL;
|
||||
}
|
||||
if (dev->priv_flags & IFF_XMIT_DST_RELEASE)
|
||||
skb_dst_drop(skb);
|
||||
|
||||
rc = ops->ndo_start_xmit(skb, dev);
|
||||
if (rc == 0)
|
||||
txq_trans_update(txq);
|
||||
|
||||
@@ -1088,8 +1088,8 @@ int neigh_update(struct neighbour *neigh, const u8 *lladdr, u8 new,
|
||||
struct neighbour *n1 = neigh;
|
||||
write_unlock_bh(&neigh->lock);
|
||||
/* On shaper/eql skb->dst->neighbour != neigh :( */
|
||||
if (skb->dst && skb->dst->neighbour)
|
||||
n1 = skb->dst->neighbour;
|
||||
if (skb_dst(skb) && skb_dst(skb)->neighbour)
|
||||
n1 = skb_dst(skb)->neighbour;
|
||||
n1->output(skb);
|
||||
write_lock_bh(&neigh->lock);
|
||||
}
|
||||
@@ -1182,7 +1182,7 @@ EXPORT_SYMBOL(neigh_compat_output);
|
||||
|
||||
int neigh_resolve_output(struct sk_buff *skb)
|
||||
{
|
||||
struct dst_entry *dst = skb->dst;
|
||||
struct dst_entry *dst = skb_dst(skb);
|
||||
struct neighbour *neigh;
|
||||
int rc = 0;
|
||||
|
||||
@@ -1229,7 +1229,7 @@ EXPORT_SYMBOL(neigh_resolve_output);
|
||||
int neigh_connected_output(struct sk_buff *skb)
|
||||
{
|
||||
int err;
|
||||
struct dst_entry *dst = skb->dst;
|
||||
struct dst_entry *dst = skb_dst(skb);
|
||||
struct neighbour *neigh = dst->neighbour;
|
||||
struct net_device *dev = neigh->dev;
|
||||
|
||||
@@ -1298,8 +1298,7 @@ void pneigh_enqueue(struct neigh_table *tbl, struct neigh_parms *p,
|
||||
if (time_before(tbl->proxy_timer.expires, sched_next))
|
||||
sched_next = tbl->proxy_timer.expires;
|
||||
}
|
||||
dst_release(skb->dst);
|
||||
skb->dst = NULL;
|
||||
skb_dst_drop(skb);
|
||||
dev_hold(skb->dev);
|
||||
__skb_queue_tail(&tbl->proxy_queue, skb);
|
||||
mod_timer(&tbl->proxy_timer, sched_next);
|
||||
|
||||
+2
-2
@@ -381,7 +381,7 @@ static void kfree_skbmem(struct sk_buff *skb)
|
||||
|
||||
static void skb_release_head_state(struct sk_buff *skb)
|
||||
{
|
||||
dst_release(skb->dst);
|
||||
skb_dst_drop(skb);
|
||||
#ifdef CONFIG_XFRM
|
||||
secpath_put(skb->sp);
|
||||
#endif
|
||||
@@ -521,7 +521,7 @@ static void __copy_skb_header(struct sk_buff *new, const struct sk_buff *old)
|
||||
new->transport_header = old->transport_header;
|
||||
new->network_header = old->network_header;
|
||||
new->mac_header = old->mac_header;
|
||||
new->dst = dst_clone(old->dst);
|
||||
skb_dst_set(new, dst_clone(skb_dst(old)));
|
||||
#ifdef CONFIG_XFRM
|
||||
new->sp = secpath_get(old->sp);
|
||||
#endif
|
||||
|
||||
+2
-2
@@ -507,7 +507,7 @@ static void dccp_v4_ctl_send_reset(struct sock *sk, struct sk_buff *rxskb)
|
||||
const struct iphdr *rxiph;
|
||||
struct sk_buff *skb;
|
||||
struct dst_entry *dst;
|
||||
struct net *net = dev_net(rxskb->dst->dev);
|
||||
struct net *net = dev_net(skb_dst(rxskb)->dev);
|
||||
struct sock *ctl_sk = net->dccp.v4_ctl_sk;
|
||||
|
||||
/* Never send a reset in response to a reset. */
|
||||
@@ -528,7 +528,7 @@ static void dccp_v4_ctl_send_reset(struct sock *sk, struct sk_buff *rxskb)
|
||||
rxiph = ip_hdr(rxskb);
|
||||
dccp_hdr(skb)->dccph_checksum = dccp_v4_csum_finish(skb, rxiph->saddr,
|
||||
rxiph->daddr);
|
||||
skb->dst = dst_clone(dst);
|
||||
skb_dst_set(skb, dst_clone(dst));
|
||||
|
||||
bh_lock_sock(ctl_sk);
|
||||
err = ip_build_and_send_pkt(skb, ctl_sk,
|
||||
|
||||
+5
-3
@@ -314,8 +314,9 @@ static void dccp_v6_ctl_send_reset(struct sock *sk, struct sk_buff *rxskb)
|
||||
struct ipv6hdr *rxip6h;
|
||||
struct sk_buff *skb;
|
||||
struct flowi fl;
|
||||
struct net *net = dev_net(rxskb->dst->dev);
|
||||
struct net *net = dev_net(skb_dst(rxskb)->dev);
|
||||
struct sock *ctl_sk = net->dccp.v6_ctl_sk;
|
||||
struct dst_entry *dst;
|
||||
|
||||
if (dccp_hdr(rxskb)->dccph_type == DCCP_PKT_RESET)
|
||||
return;
|
||||
@@ -342,8 +343,9 @@ static void dccp_v6_ctl_send_reset(struct sock *sk, struct sk_buff *rxskb)
|
||||
security_skb_classify_flow(rxskb, &fl);
|
||||
|
||||
/* sk = NULL, but it is safe for now. RST socket required. */
|
||||
if (!ip6_dst_lookup(ctl_sk, &skb->dst, &fl)) {
|
||||
if (xfrm_lookup(net, &skb->dst, &fl, NULL, 0) >= 0) {
|
||||
if (!ip6_dst_lookup(ctl_sk, &dst, &fl)) {
|
||||
if (xfrm_lookup(net, &dst, &fl, NULL, 0) >= 0) {
|
||||
skb_dst_set(skb, dst);
|
||||
ip6_xmit(ctl_sk, skb, &fl, NULL, 0);
|
||||
DCCP_INC_STATS_BH(DCCP_MIB_OUTSEGS);
|
||||
DCCP_INC_STATS_BH(DCCP_MIB_OUTRSTS);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user