• Home
  • Raw
  • Download

Lines Matching refs:skb

260 static int fr_hard_header(struct sk_buff *skb, u16 dlci)  in fr_hard_header()  argument
262 if (!skb->dev) { /* Control packets */ in fr_hard_header()
265 skb_push(skb, 4); in fr_hard_header()
266 skb->data[3] = NLPID_CCITT_ANSI_LMI; in fr_hard_header()
270 skb_push(skb, 4); in fr_hard_header()
271 skb->data[3] = NLPID_CISCO_LMI; in fr_hard_header()
278 } else if (skb->dev->type == ARPHRD_DLCI) { in fr_hard_header()
279 switch (skb->protocol) { in fr_hard_header()
281 skb_push(skb, 4); in fr_hard_header()
282 skb->data[3] = NLPID_IP; in fr_hard_header()
286 skb_push(skb, 4); in fr_hard_header()
287 skb->data[3] = NLPID_IPV6; in fr_hard_header()
291 skb_push(skb, 10); in fr_hard_header()
292 skb->data[3] = FR_PAD; in fr_hard_header()
293 skb->data[4] = NLPID_SNAP; in fr_hard_header()
295 skb->data[5] = 0x00; in fr_hard_header()
296 skb->data[6] = 0x00; in fr_hard_header()
297 skb->data[7] = 0x00; in fr_hard_header()
299 *(__be16 *)(skb->data + 8) = skb->protocol; in fr_hard_header()
302 } else if (skb->dev->type == ARPHRD_ETHER) { in fr_hard_header()
303 skb_push(skb, 10); in fr_hard_header()
304 skb->data[3] = FR_PAD; in fr_hard_header()
305 skb->data[4] = NLPID_SNAP; in fr_hard_header()
307 skb->data[5] = 0x00; in fr_hard_header()
308 skb->data[6] = 0x80; in fr_hard_header()
309 skb->data[7] = 0xC2; in fr_hard_header()
311 skb->data[8] = 0x00; in fr_hard_header()
312 skb->data[9] = 0x07; in fr_hard_header()
318 dlci_to_q922(skb->data, dlci); in fr_hard_header()
319 skb->data[2] = FR_UI; in fr_hard_header()
388 static netdev_tx_t pvc_xmit(struct sk_buff *skb, struct net_device *dev) in pvc_xmit() argument
396 int pad = ETH_ZLEN - skb->len; in pvc_xmit()
399 if (__skb_pad(skb, pad, false)) in pvc_xmit()
401 skb_put(skb, pad); in pvc_xmit()
409 if (skb_headroom(skb) < 10) { in pvc_xmit()
410 struct sk_buff *skb2 = skb_realloc_headroom(skb, 10); in pvc_xmit()
414 dev_kfree_skb(skb); in pvc_xmit()
415 skb = skb2; in pvc_xmit()
418 skb->dev = dev; in pvc_xmit()
419 if (fr_hard_header(skb, pvc->dlci)) in pvc_xmit()
422 dev->stats.tx_bytes += skb->len; in pvc_xmit()
426 skb->dev = pvc->frad; in pvc_xmit()
427 skb->protocol = htons(ETH_P_HDLC); in pvc_xmit()
428 skb_reset_network_header(skb); in pvc_xmit()
429 dev_queue_xmit(skb); in pvc_xmit()
434 kfree_skb(skb); in pvc_xmit()
459 struct sk_buff *skb; in fr_lmi_send() local
476 skb = dev_alloc_skb(len); in fr_lmi_send()
477 if (!skb) in fr_lmi_send()
480 memset(skb->data, 0, len); in fr_lmi_send()
481 skb_reserve(skb, 4); in fr_lmi_send()
483 fr_hard_header(skb, LMI_CISCO_DLCI); in fr_lmi_send()
485 fr_hard_header(skb, LMI_CCITT_ANSI_DLCI); in fr_lmi_send()
487 data = skb_tail_pointer(skb); in fr_lmi_send()
541 skb_put(skb, i); in fr_lmi_send()
542 skb->priority = TC_PRIO_CONTROL; in fr_lmi_send()
543 skb->dev = dev; in fr_lmi_send()
544 skb->protocol = htons(ETH_P_HDLC); in fr_lmi_send()
545 skb_reset_network_header(skb); in fr_lmi_send()
547 dev_queue_xmit(skb); in fr_lmi_send()
633 static int fr_lmi_recv(struct net_device *dev, struct sk_buff *skb) in fr_lmi_recv() argument
642 if (skb->len < (lmi == LMI_ANSI ? LMI_ANSI_LENGTH : in fr_lmi_recv()
648 if (skb->data[3] != (lmi == LMI_CISCO ? NLPID_CISCO_LMI : in fr_lmi_recv()
654 if (skb->data[4] != LMI_CALLREF) { in fr_lmi_recv()
656 skb->data[4]); in fr_lmi_recv()
660 if (skb->data[5] != (dce ? LMI_STATUS_ENQUIRY : LMI_STATUS)) { in fr_lmi_recv()
662 skb->data[5]); in fr_lmi_recv()
667 if (skb->data[6] != LMI_ANSI_LOCKSHIFT) { in fr_lmi_recv()
669 skb->data[6]); in fr_lmi_recv()
677 if (skb->data[i] != (lmi == LMI_CCITT ? LMI_CCITT_REPTYPE : in fr_lmi_recv()
680 skb->data[i]); in fr_lmi_recv()
684 if (skb->data[++i] != LMI_REPT_LEN) { in fr_lmi_recv()
686 skb->data[i]); in fr_lmi_recv()
690 reptype = skb->data[++i]; in fr_lmi_recv()
697 if (skb->data[++i] != (lmi == LMI_CCITT ? LMI_CCITT_ALIVE : in fr_lmi_recv()
700 skb->data[i]); in fr_lmi_recv()
704 if (skb->data[++i] != LMI_INTEG_LEN) { in fr_lmi_recv()
706 skb->data[i]); in fr_lmi_recv()
711 state(hdlc)->rxseq = skb->data[i++]; /* TX sequence from peer */ in fr_lmi_recv()
712 rxseq = skb->data[i++]; /* Should confirm our sequence */ in fr_lmi_recv()
773 while (skb->len >= i + 2 + stat_len) { in fr_lmi_recv()
778 if (skb->data[i] != (lmi == LMI_CCITT ? LMI_CCITT_PVCSTAT : in fr_lmi_recv()
781 skb->data[i]); in fr_lmi_recv()
785 if (skb->data[++i] != stat_len) { in fr_lmi_recv()
787 skb->data[i]); in fr_lmi_recv()
792 new = !!(skb->data[i + 2] & 0x08); in fr_lmi_recv()
793 active = !!(skb->data[i + 2] & 0x02); in fr_lmi_recv()
795 dlci = (skb->data[i] << 8) | skb->data[i + 1]; in fr_lmi_recv()
796 bw = (skb->data[i + 3] << 16) | in fr_lmi_recv()
797 (skb->data[i + 4] << 8) | in fr_lmi_recv()
798 (skb->data[i + 5]); in fr_lmi_recv()
800 dlci = ((skb->data[i] & 0x3F) << 4) | in fr_lmi_recv()
801 ((skb->data[i + 1] & 0x78) >> 3); in fr_lmi_recv()
849 static int fr_snap_parse(struct sk_buff *skb, struct pvc_device *pvc) in fr_snap_parse() argument
852 if (skb->data[0] == 0x00 && in fr_snap_parse()
853 skb->data[1] == 0x00 && in fr_snap_parse()
854 skb->data[2] == 0x00) { in fr_snap_parse()
857 skb->dev = pvc->main; in fr_snap_parse()
858 skb->protocol = *(__be16 *)(skb->data + 3); /* Ethertype */ in fr_snap_parse()
859 skb_pull(skb, 5); in fr_snap_parse()
860 skb_reset_mac_header(skb); in fr_snap_parse()
864 } else if (skb->data[0] == 0x00 && in fr_snap_parse()
865 skb->data[1] == 0x80 && in fr_snap_parse()
866 skb->data[2] == 0xC2) { in fr_snap_parse()
868 if (skb->data[3] == 0x00 && in fr_snap_parse()
869 skb->data[4] == 0x07) { in fr_snap_parse()
872 skb_pull(skb, 5); in fr_snap_parse()
873 if (skb->len < ETH_HLEN) in fr_snap_parse()
875 skb->protocol = eth_type_trans(skb, pvc->ether); in fr_snap_parse()
889 static int fr_rx(struct sk_buff *skb) in fr_rx() argument
891 struct net_device *frad = skb->dev; in fr_rx()
893 struct fr_hdr *fh = (struct fr_hdr *)skb->data; in fr_rx()
894 u8 *data = skb->data; in fr_rx()
899 if (skb->len < 4 || fh->ea1 || !fh->ea2 || data[2] != FR_UI) in fr_rx()
902 dlci = q922_to_dlci(skb->data); in fr_rx()
909 if (fr_lmi_recv(frad, skb)) in fr_rx()
911 dev_kfree_skb_any(skb); in fr_rx()
940 skb = skb_share_check(skb, GFP_ATOMIC); in fr_rx()
941 if (!skb) { in fr_rx()
949 skb_pull(skb, 4); /* Remove 4-byte header (hdr, UI, NLPID) */ in fr_rx()
950 skb->dev = pvc->main; in fr_rx()
951 skb->protocol = htons(ETH_P_IP); in fr_rx()
952 skb_reset_mac_header(skb); in fr_rx()
957 skb_pull(skb, 4); /* Remove 4-byte header (hdr, UI, NLPID) */ in fr_rx()
958 skb->dev = pvc->main; in fr_rx()
959 skb->protocol = htons(ETH_P_IPV6); in fr_rx()
960 skb_reset_mac_header(skb); in fr_rx()
963 if (skb->len < 5) in fr_rx()
966 skb_pull(skb, 5); in fr_rx()
967 if (skb->len < 5) /* Incomplete SNAP header */ in fr_rx()
969 if (fr_snap_parse(skb, pvc)) in fr_rx()
977 data[3], skb->len); in fr_rx()
981 dev = skb->dev; in fr_rx()
983 dev->stats.rx_bytes += skb->len; in fr_rx()
986 netif_rx(skb); in fr_rx()
992 dev_kfree_skb_any(skb); in fr_rx()