Lines Matching refs:skb
81 static void dn_log_martian(struct sk_buff *skb, const char *msg) in dn_log_martian() argument
84 char *devname = skb->dev ? skb->dev->name : "???"; in dn_log_martian()
85 struct dn_skb_cb *cb = DN_SKB_CB(skb); in dn_log_martian()
100 static void dn_ack(struct sock *sk, struct sk_buff *skb, unsigned short ack) in dn_ack() argument
110 wakeup |= dn_nsp_check_xmit_queue(sk, skb, in dn_ack()
120 wakeup |= dn_nsp_check_xmit_queue(sk, skb, in dn_ack()
136 static int dn_process_ack(struct sock *sk, struct sk_buff *skb, int oth) in dn_process_ack() argument
138 __le16 *ptr = (__le16 *)skb->data; in dn_process_ack()
142 if (skb->len < 2) in dn_process_ack()
146 skb_pull(skb, 2); in dn_process_ack()
152 dn_ack(sk, skb, ack); in dn_process_ack()
156 if (skb->len < 2) in dn_process_ack()
160 skb_pull(skb, 2); in dn_process_ack()
165 dn_ack(sk, skb, ack); in dn_process_ack()
225 static struct sock *dn_find_listener(struct sk_buff *skb, unsigned short *reason) in dn_find_listener() argument
227 struct dn_skb_cb *cb = DN_SKB_CB(skb); in dn_find_listener()
228 struct nsp_conn_init_msg *msg = (struct nsp_conn_init_msg *)skb->data; in dn_find_listener()
251 if (!pskb_may_pull(skb, sizeof(*msg))) in dn_find_listener()
254 skb_pull(skb, sizeof(*msg)); in dn_find_listener()
256 len = skb->len; in dn_find_listener()
257 ptr = skb->data; in dn_find_listener()
326 dn_log_martian(skb, ci_err_table[err].text); in dn_find_listener()
332 static void dn_nsp_conn_init(struct sock *sk, struct sk_buff *skb) in dn_nsp_conn_init() argument
335 kfree_skb(skb); in dn_nsp_conn_init()
340 skb_queue_tail(&sk->sk_receive_queue, skb); in dn_nsp_conn_init()
344 static void dn_nsp_conn_conf(struct sock *sk, struct sk_buff *skb) in dn_nsp_conn_conf() argument
346 struct dn_skb_cb *cb = DN_SKB_CB(skb); in dn_nsp_conn_conf()
350 if (skb->len < 4) in dn_nsp_conn_conf()
353 ptr = skb->data; in dn_nsp_conn_conf()
370 if (skb->len > 0) { in dn_nsp_conn_conf()
371 u16 dlen = *skb->data; in dn_nsp_conn_conf()
372 if ((dlen <= 16) && (dlen <= skb->len)) { in dn_nsp_conn_conf()
374 skb_copy_from_linear_data_offset(skb, 1, in dn_nsp_conn_conf()
384 kfree_skb(skb); in dn_nsp_conn_conf()
387 static void dn_nsp_conn_ack(struct sock *sk, struct sk_buff *skb) in dn_nsp_conn_ack() argument
396 kfree_skb(skb); in dn_nsp_conn_ack()
399 static void dn_nsp_disc_init(struct sock *sk, struct sk_buff *skb) in dn_nsp_disc_init() argument
402 struct dn_skb_cb *cb = DN_SKB_CB(skb); in dn_nsp_disc_init()
405 if (skb->len < 2) in dn_nsp_disc_init()
408 reason = le16_to_cpu(*(__le16 *)skb->data); in dn_nsp_disc_init()
409 skb_pull(skb, 2); in dn_nsp_disc_init()
415 if (skb->len > 0) { in dn_nsp_disc_init()
416 u16 dlen = *skb->data; in dn_nsp_disc_init()
417 if ((dlen <= 16) && (dlen <= skb->len)) { in dn_nsp_disc_init()
419 skb_copy_from_linear_data_offset(skb, 1, scp->discdata_in.opt_data, dlen); in dn_nsp_disc_init()
460 kfree_skb(skb); in dn_nsp_disc_init()
467 static void dn_nsp_disc_conf(struct sock *sk, struct sk_buff *skb) in dn_nsp_disc_conf() argument
472 if (skb->len != 2) in dn_nsp_disc_conf()
475 reason = le16_to_cpu(*(__le16 *)skb->data); in dn_nsp_disc_conf()
508 kfree_skb(skb); in dn_nsp_disc_conf()
511 static void dn_nsp_linkservice(struct sock *sk, struct sk_buff *skb) in dn_nsp_linkservice() argument
518 char *ptr = skb->data; in dn_nsp_linkservice()
521 if (skb->len != 4) in dn_nsp_linkservice()
577 kfree_skb(skb); in dn_nsp_linkservice()
585 static __inline__ int dn_queue_skb(struct sock *sk, struct sk_buff *skb, int sig, struct sk_buff_he… in dn_queue_skb() argument
593 if (atomic_read(&sk->sk_rmem_alloc) + skb->truesize >= in dn_queue_skb()
599 err = sk_filter(sk, skb); in dn_queue_skb()
603 skb_len = skb->len; in dn_queue_skb()
604 skb_set_owner_r(skb, sk); in dn_queue_skb()
605 skb_queue_tail(queue, skb); in dn_queue_skb()
613 static void dn_nsp_otherdata(struct sock *sk, struct sk_buff *skb) in dn_nsp_otherdata() argument
617 struct dn_skb_cb *cb = DN_SKB_CB(skb); in dn_nsp_otherdata()
620 if (skb->len < 2) in dn_nsp_otherdata()
623 cb->segnum = segnum = le16_to_cpu(*(__le16 *)skb->data); in dn_nsp_otherdata()
624 skb_pull(skb, 2); in dn_nsp_otherdata()
628 if (dn_queue_skb(sk, skb, SIGURG, &scp->other_receive_queue) == 0) { in dn_nsp_otherdata()
638 kfree_skb(skb); in dn_nsp_otherdata()
641 static void dn_nsp_data(struct sock *sk, struct sk_buff *skb) in dn_nsp_data() argument
645 struct dn_skb_cb *cb = DN_SKB_CB(skb); in dn_nsp_data()
648 if (skb->len < 2) in dn_nsp_data()
651 cb->segnum = segnum = le16_to_cpu(*(__le16 *)skb->data); in dn_nsp_data()
652 skb_pull(skb, 2); in dn_nsp_data()
655 if (dn_queue_skb(sk, skb, SIGIO, &sk->sk_receive_queue) == 0) { in dn_nsp_data()
669 kfree_skb(skb); in dn_nsp_data()
677 static void dn_returned_conn_init(struct sock *sk, struct sk_buff *skb) in dn_returned_conn_init() argument
688 kfree_skb(skb); in dn_returned_conn_init()
691 static int dn_nsp_no_socket(struct sk_buff *skb, unsigned short reason) in dn_nsp_no_socket() argument
693 struct dn_skb_cb *cb = DN_SKB_CB(skb); in dn_nsp_no_socket()
704 dn_nsp_return_disc(skb, NSP_DISCINIT, reason); in dn_nsp_no_socket()
708 dn_nsp_return_disc(skb, NSP_DISCCONF, reason); in dn_nsp_no_socket()
715 kfree_skb(skb); in dn_nsp_no_socket()
719 static int dn_nsp_rx_packet(struct sk_buff *skb) in dn_nsp_rx_packet() argument
721 struct dn_skb_cb *cb = DN_SKB_CB(skb); in dn_nsp_rx_packet()
723 unsigned char *ptr = (unsigned char *)skb->data; in dn_nsp_rx_packet()
726 if (!pskb_may_pull(skb, 2)) in dn_nsp_rx_packet()
729 skb_reset_transport_header(skb); in dn_nsp_rx_packet()
751 sk = dn_find_listener(skb, &reason); in dn_nsp_rx_packet()
756 if (!pskb_may_pull(skb, 3)) in dn_nsp_rx_packet()
769 if (pskb_may_pull(skb, 5)) { in dn_nsp_rx_packet()
772 skb_pull(skb, 5); in dn_nsp_rx_packet()
791 sk = dn_find_by_skb(skb); in dn_nsp_rx_packet()
803 if (unlikely(skb_linearize(skb))) in dn_nsp_rx_packet()
807 return sk_receive_skb(sk, skb, 0); in dn_nsp_rx_packet()
810 return dn_nsp_no_socket(skb, reason); in dn_nsp_rx_packet()
813 kfree_skb(skb); in dn_nsp_rx_packet()
817 int dn_nsp_rx(struct sk_buff *skb) in dn_nsp_rx() argument
819 return NF_HOOK(NFPROTO_DECNET, NF_DN_LOCAL_IN, skb, skb->dev, NULL, in dn_nsp_rx()
828 int dn_nsp_backlog_rcv(struct sock *sk, struct sk_buff *skb) in dn_nsp_backlog_rcv() argument
831 struct dn_skb_cb *cb = DN_SKB_CB(skb); in dn_nsp_backlog_rcv()
835 dn_returned_conn_init(sk, skb); in dn_nsp_backlog_rcv()
837 kfree_skb(skb); in dn_nsp_backlog_rcv()
848 dn_nsp_conn_init(sk, skb); in dn_nsp_backlog_rcv()
851 dn_nsp_conn_conf(sk, skb); in dn_nsp_backlog_rcv()
854 dn_nsp_disc_init(sk, skb); in dn_nsp_backlog_rcv()
857 dn_nsp_disc_conf(sk, skb); in dn_nsp_backlog_rcv()
866 dn_nsp_conn_ack(sk, skb); in dn_nsp_backlog_rcv()
887 dn_process_ack(sk, skb, other); in dn_nsp_backlog_rcv()
901 dn_nsp_linkservice(sk, skb); in dn_nsp_backlog_rcv()
904 dn_nsp_otherdata(sk, skb); in dn_nsp_backlog_rcv()
907 dn_nsp_data(sk, skb); in dn_nsp_backlog_rcv()
912 kfree_skb(skb); in dn_nsp_backlog_rcv()