int x25_lapb_receive_frame(struct sk_buff *skb, struct net_device *dev, struct packet_type *ptype, struct net_device *orig_dev) { struct sk_buff *nskb; struct x25_neigh *nb; if (!net_eq(dev_net(dev), &init_net)) goto drop; nskb = skb_copy(skb, GFP_ATOMIC); if (!nskb) goto drop; kfree_skb(skb); skb = nskb; /* */ nb = x25_get_neigh(dev); if (!nb) { printk(KERN_DEBUG "X.25: unknown neighbour - %s\n", dev->name); goto drop; } if (!pskb_may_pull(skb, 1)) return 0; switch (skb->data[0]) { case X25_IFACE_DATA: skb_pull(skb, 1); if (x25_receive_data(skb, nb)) { x25_neigh_put(nb); goto out; } break; case X25_IFACE_CONNECT: x25_link_established(nb); break; case X25_IFACE_DISCONNECT: x25_link_terminated(nb); break; } x25_neigh_put(nb); drop: kfree_skb(skb); out: return 0; }
/* * Handle the ioctls that control the subscription functions. */ int x25_subscr_ioctl(unsigned int cmd, void *arg) { struct x25_subscrip_struct x25_subscr; struct x25_neigh *x25_neigh; struct device *dev; switch (cmd) { case SIOCX25GSUBSCRIP: if ((dev = x25_dev_get(x25_subscr.device)) == NULL) return -EINVAL; if ((x25_neigh = x25_get_neigh(dev)) == NULL) return -EINVAL; x25_subscr.extended = x25_neigh->extended; if (copy_to_user(arg, &x25_subscr, sizeof(struct x25_subscrip_struct))) return -EFAULT; break; case SIOCX25SSUBSCRIP: if (copy_from_user(&x25_subscr, arg, sizeof(struct x25_subscrip_struct))) return -EFAULT; if ((dev = x25_dev_get(x25_subscr.device)) == NULL) return -EINVAL; if ((x25_neigh = x25_get_neigh(dev)) == NULL) return -EINVAL; if (x25_subscr.extended != 0 && x25_subscr.extended != 1) return -EINVAL; x25_neigh->extended = x25_subscr.extended; break; default: return -EINVAL; } return 0; }
int x25_llc_receive_frame(struct sk_buff *skb, struct net_device *dev, struct packet_type *ptype) { struct x25_neigh *neigh; skb->sk = NULL; /* * Packet received from unrecognised device, throw it away. */ if ((neigh = x25_get_neigh(dev)) == NULL) { printk(KERN_DEBUG "X.25: unknown_neighbour - %s\n", dev->name); kfree_skb(skb); return 0; } return x25_receive_data(skb, neigh); }
int x25_lapb_receive_frame(struct sk_buff *skb, struct net_device *dev, struct packet_type *ptype) { struct x25_neigh *neigh; int queued; skb->sk = NULL; /* * Packet received from unrecognised device, throw it away. */ if ((neigh = x25_get_neigh(dev)) == NULL) { printk(KERN_DEBUG "X.25: unknown neighbour - %s\n", dev->name); kfree_skb(skb); return 0; } switch (skb->data[0]) { case 0x00: skb_pull(skb, 1); queued = x25_receive_data(skb, neigh); if( ! queued ) /* We need to free the skb ourselves because * net_bh() won't care about our return code. */ kfree_skb(skb); return 0; case 0x01: x25_link_established(neigh); kfree_skb(skb); return 0; case 0x02: x25_link_terminated(neigh); kfree_skb(skb); return 0; case 0x03: kfree_skb(skb); return 0; default: kfree_skb(skb); return 0; } }
int x25_lapb_receive_frame(struct sk_buff *skb, struct net_device *dev, struct packet_type *ptype, struct net_device *orig_dev) { struct sk_buff *nskb; struct x25_neigh *nb; if (!net_eq(dev_net(dev), &init_net)) goto drop; nskb = skb_copy(skb, GFP_ATOMIC); if (!nskb) goto drop; kfree_skb(skb); skb = nskb; /* * Packet received from unrecognised device, throw it away. */ nb = x25_get_neigh(dev); if (!nb) { printk(KERN_DEBUG "X.25: unknown neighbour - %s\n", dev->name); goto drop; } switch (skb->data[0]) { case 0x00: skb_pull(skb, 1); if (x25_receive_data(skb, nb)) { x25_neigh_put(nb); goto out; } break; case 0x01: x25_link_established(nb); break; case 0x02: x25_link_terminated(nb); break; } x25_neigh_put(nb); drop: kfree_skb(skb); out: return 0; }
int x25_forward_call(struct x25_address *dest_addr, struct x25_neigh *from, struct sk_buff *skb, int lci) { struct x25_route *rt; struct x25_neigh *neigh_new = NULL; struct list_head *entry; struct x25_forward *x25_frwd, *new_frwd; struct sk_buff *skbn; short same_lci = 0; int rc = 0; if ((rt = x25_get_route(dest_addr)) == NULL) goto out_no_route; if ((neigh_new = x25_get_neigh(rt->dev)) == NULL) { <<<<<<< HEAD /* This shouldn't happen, if it occurs somehow ======= /* This shouldnt happen, if it occurs somehow >>>>>>> 296c66da8a02d52243f45b80521febece5ed498a * do something sensible */ goto out_put_route; }