Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 170700
b: refs/heads/master
c: aa6c45f
h: refs/heads/master
v: v3
  • Loading branch information
Rémi Denis-Courmont authored and David S. Miller committed Oct 14, 2009
1 parent 55c2d65 commit 964c327
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 6 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: f062f41d06575744b9eaf725eef8a5d3b5f5b7ca
refs/heads/master: aa6c45f32f7db292f8f6a76d7b39c19007d6a456
17 changes: 12 additions & 5 deletions trunk/net/phonet/af_phonet.c
Original file line number Diff line number Diff line change
Expand Up @@ -190,9 +190,8 @@ static int pn_send(struct sk_buff *skb, struct net_device *dev,
skb->priority = 0;
skb->dev = dev;

if (pn_addr(src) == pn_addr(dst)) {
if (skb->pkt_type == PACKET_LOOPBACK) {
skb_reset_mac_header(skb);
skb->pkt_type = PACKET_LOOPBACK;
skb_orphan(skb);
if (irq)
netif_rx(skb);
Expand Down Expand Up @@ -222,6 +221,9 @@ static int pn_raw_send(const void *data, int len, struct net_device *dev,
if (skb == NULL)
return -ENOMEM;

if (phonet_address_lookup(dev_net(dev), pn_addr(dst)) == 0)
skb->pkt_type = PACKET_LOOPBACK;

skb_reserve(skb, MAX_PHONET_HEADER);
__skb_put(skb, len);
skb_copy_to_linear_data(skb, data, len);
Expand All @@ -235,6 +237,7 @@ static int pn_raw_send(const void *data, int len, struct net_device *dev,
int pn_skb_send(struct sock *sk, struct sk_buff *skb,
const struct sockaddr_pn *target)
{
struct net *net = sock_net(sk);
struct net_device *dev;
struct pn_sock *pn = pn_sk(sk);
int err;
Expand All @@ -243,9 +246,13 @@ int pn_skb_send(struct sock *sk, struct sk_buff *skb,

err = -EHOSTUNREACH;
if (sk->sk_bound_dev_if)
dev = dev_get_by_index(sock_net(sk), sk->sk_bound_dev_if);
else
dev = phonet_device_get(sock_net(sk));
dev = dev_get_by_index(net, sk->sk_bound_dev_if);
else if (phonet_address_lookup(net, daddr) == 0) {
dev = phonet_device_get(net);
skb->pkt_type = PACKET_LOOPBACK;
} else
dev = phonet_route_output(net, daddr);

if (!dev || !(dev->flags & IFF_UP))
goto drop;

Expand Down

0 comments on commit 964c327

Please sign in to comment.