Lines Matching refs:skb
57 static unsigned char *pep_get_sb(struct sk_buff *skb, u8 *ptype, u8 *plen, in pep_get_sb() argument
67 ph = skb_header_pointer(skb, 0, 2, &h); in pep_get_sb()
68 if (ph == NULL || ph->sb_len < 2 || !pskb_may_pull(skb, ph->sb_len)) in pep_get_sb()
76 data = skb_header_pointer(skb, 2, buflen, buf); in pep_get_sb()
77 __skb_pull(skb, 2 + ph->sb_len); in pep_get_sb()
84 struct sk_buff *skb = alloc_skb(MAX_PNPIPE_HEADER + len, priority); in pep_alloc_skb() local
85 if (!skb) in pep_alloc_skb()
87 skb_set_owner_w(skb, sk); in pep_alloc_skb()
89 skb_reserve(skb, MAX_PNPIPE_HEADER); in pep_alloc_skb()
90 __skb_put(skb, len); in pep_alloc_skb()
91 skb_copy_to_linear_data(skb, payload, len); in pep_alloc_skb()
92 __skb_push(skb, sizeof(struct pnpipehdr)); in pep_alloc_skb()
93 skb_reset_transport_header(skb); in pep_alloc_skb()
94 return skb; in pep_alloc_skb()
102 struct sk_buff *skb; in pep_reply() local
105 skb = pep_alloc_skb(sk, data, len, priority); in pep_reply()
106 if (!skb) in pep_reply()
109 ph = pnp_hdr(skb); in pep_reply()
116 return pn_skb_send(sk, skb, &peer); in pep_reply()
124 struct sk_buff *skb; in pep_indicate() local
126 skb = pep_alloc_skb(sk, data, len, priority); in pep_indicate()
127 if (!skb) in pep_indicate()
130 ph = pnp_hdr(skb); in pep_indicate()
135 return pn_skb_send(sk, skb, NULL); in pep_indicate()
145 struct sk_buff *skb; in pipe_handler_request() local
147 skb = pep_alloc_skb(sk, data, len, GFP_KERNEL); in pipe_handler_request()
148 if (!skb) in pipe_handler_request()
151 ph = pnp_hdr(skb); in pipe_handler_request()
156 return pn_skb_send(sk, skb, NULL); in pipe_handler_request()
171 static int pep_accept_conn(struct sock *sk, struct sk_buff *skb) in pep_accept_conn() argument
188 return pep_reply(sk, skb, PN_PIPE_NO_ERROR, data, sizeof(data), in pep_accept_conn()
192 static int pep_reject_conn(struct sock *sk, struct sk_buff *skb, u8 code, in pep_reject_conn() argument
197 return pep_reply(sk, skb, code, data, sizeof(data), priority); in pep_reject_conn()
206 struct sk_buff *skb; in pep_ctrlreq_error() local
215 skb = pep_alloc_skb(sk, data, 4, priority); in pep_ctrlreq_error()
216 if (!skb) in pep_ctrlreq_error()
219 ph = pnp_hdr(skb); in pep_ctrlreq_error()
226 return pn_skb_send(sk, skb, &dst); in pep_ctrlreq_error()
264 static int pipe_rcv_status(struct sock *sk, struct sk_buff *skb) in pipe_rcv_status() argument
270 if (!pskb_may_pull(skb, sizeof(*hdr) + 4)) in pipe_rcv_status()
273 hdr = pnp_hdr(skb); in pipe_rcv_status()
316 static int pipe_rcv_created(struct sock *sk, struct sk_buff *skb) in pipe_rcv_created() argument
319 struct pnpipehdr *hdr = pnp_hdr(skb); in pipe_rcv_created()
323 __skb_pull(skb, sizeof(*hdr)); in pipe_rcv_created()
326 u8 *data = pep_get_sb(skb, &type, &len, buf); in pipe_rcv_created()
345 static int pipe_do_rcv(struct sock *sk, struct sk_buff *skb) in pipe_do_rcv() argument
348 struct pnpipehdr *hdr = pnp_hdr(skb); in pipe_do_rcv()
356 pep_reject_conn(sk, skb, PN_PIPE_ERR_PEP_IN_USE, GFP_ATOMIC); in pipe_do_rcv()
360 pep_reply(sk, skb, PN_PIPE_NO_ERROR, NULL, 0, GFP_ATOMIC); in pipe_do_rcv()
368 pep_reply(sk, skb, PN_PIPE_NO_ERROR, NULL, 0, GFP_ATOMIC); in pipe_do_rcv()
386 pep_reply(sk, skb, PN_PIPE_NO_ERROR, NULL, 0, GFP_ATOMIC); in pipe_do_rcv()
394 __skb_pull(skb, 4); in pipe_do_rcv()
399 __skb_pull(skb, 1); in pipe_do_rcv()
402 __skb_pull(skb, 3); /* Pipe data header */ in pipe_do_rcv()
404 err = sock_queue_rcv_skb(sk, skb); in pipe_do_rcv()
421 pipe_rcv_status(sk, skb); in pipe_do_rcv()
425 err = pipe_rcv_created(sk, skb); in pipe_do_rcv()
429 err = pipe_rcv_created(sk, skb); in pipe_do_rcv()
459 kfree_skb(skb); in pipe_do_rcv()
463 skb->dev = NULL; in pipe_do_rcv()
464 skb_set_owner_r(skb, sk); in pipe_do_rcv()
465 skb_queue_tail(queue, skb); in pipe_do_rcv()
494 static int pep_connresp_rcv(struct sock *sk, struct sk_buff *skb) in pep_connresp_rcv() argument
500 if (!pskb_pull(skb, sizeof(*hdr) + 4)) in pep_connresp_rcv()
503 hdr = pnp_hdr(skb); in pep_connresp_rcv()
511 const u8 *data = pep_get_sb(skb, &type, &len, buf); in pep_connresp_rcv()
536 static int pep_enableresp_rcv(struct sock *sk, struct sk_buff *skb) in pep_enableresp_rcv() argument
538 struct pnpipehdr *hdr = pnp_hdr(skb); in pep_enableresp_rcv()
561 static int pipe_handler_do_rcv(struct sock *sk, struct sk_buff *skb) in pipe_handler_do_rcv() argument
564 struct pnpipehdr *hdr = pnp_hdr(skb); in pipe_handler_do_rcv()
569 __skb_pull(skb, 1); in pipe_handler_do_rcv()
572 __skb_pull(skb, 3); /* Pipe data header */ in pipe_handler_do_rcv()
574 err = sock_queue_rcv_skb(sk, skb); in pipe_handler_do_rcv()
587 skb->dev = NULL; in pipe_handler_do_rcv()
588 skb_set_owner_r(skb, sk); in pipe_handler_do_rcv()
589 skb_queue_tail(&sk->sk_receive_queue, skb); in pipe_handler_do_rcv()
599 if (pep_connresp_rcv(sk, skb)) { in pipe_handler_do_rcv()
615 if (pep_enableresp_rcv(sk, skb)) { in pipe_handler_do_rcv()
629 pipe_rcv_status(sk, skb); in pipe_handler_do_rcv()
632 kfree_skb(skb); in pipe_handler_do_rcv()
666 static int pep_do_rcv(struct sock *sk, struct sk_buff *skb) in pep_do_rcv() argument
674 if (!pskb_may_pull(skb, sizeof(*hdr))) in pep_do_rcv()
677 hdr = pnp_hdr(skb); in pep_do_rcv()
682 pn_skb_get_dst_sockaddr(skb, &dst); in pep_do_rcv()
687 return sk_receive_skb(sknode, skb, 1); in pep_do_rcv()
692 pep_reject_conn(sk, skb, PN_PIPE_ERR_PEP_IN_USE, in pep_do_rcv()
696 skb_queue_head(&sk->sk_receive_queue, skb); in pep_do_rcv()
703 pep_reply(sk, skb, PN_PIPE_NO_ERROR, NULL, 0, GFP_ATOMIC); in pep_do_rcv()
707 pep_ctrlreq_error(sk, skb, PN_PIPE_INVALID_HANDLE, GFP_ATOMIC); in pep_do_rcv()
720 return pipe_handler_do_rcv(sk, skb); in pep_do_rcv()
723 kfree_skb(skb); in pep_do_rcv()
731 struct sk_buff *skb; in pipe_do_remove() local
733 skb = pep_alloc_skb(sk, NULL, 0, GFP_KERNEL); in pipe_do_remove()
734 if (!skb) in pipe_do_remove()
737 ph = pnp_hdr(skb); in pipe_do_remove()
742 return pn_skb_send(sk, skb, NULL); in pipe_do_remove()
778 struct sk_buff *skb; in pep_sock_accept() local
786 skb = skb_recv_datagram(sk, 0, flags & O_NONBLOCK, errp); in pep_sock_accept()
787 if (!skb) in pep_sock_accept()
798 if (!pskb_may_pull(skb, sizeof(*hdr) + 4)) in pep_sock_accept()
801 hdr = pnp_hdr(skb); in pep_sock_accept()
811 pep_reject_conn(sk, skb, PN_PIPE_ERR_INVALID_PARAM, in pep_sock_accept()
821 const u8 *data = pep_get_sb(skb, &type, &len, buf); in pep_sock_accept()
843 pep_reject_conn(sk, skb, PN_PIPE_ERR_PEP_IN_USE, GFP_KERNEL); in pep_sock_accept()
850 pep_reject_conn(sk, skb, PN_PIPE_ERR_OVERLOAD, GFP_KERNEL); in pep_sock_accept()
862 pn_skb_get_dst_sockaddr(skb, &dst); in pep_sock_accept()
863 pn_skb_get_src_sockaddr(skb, &src); in pep_sock_accept()
879 err = pep_accept_conn(newsk, skb); in pep_sock_accept()
888 kfree_skb(skb); in pep_sock_accept()
1091 static int pipe_skb_send(struct sock *sk, struct sk_buff *skb) in pipe_skb_send() argument
1099 kfree_skb(skb); in pipe_skb_send()
1103 skb_push(skb, 3 + pn->aligned); in pipe_skb_send()
1104 skb_reset_transport_header(skb); in pipe_skb_send()
1105 ph = pnp_hdr(skb); in pipe_skb_send()
1113 err = pn_skb_send(sk, skb, NULL); in pipe_skb_send()
1124 struct sk_buff *skb; in pep_sendmsg() local
1137 skb = sock_alloc_send_skb(sk, MAX_PNPIPE_HEADER + len, in pep_sendmsg()
1139 if (!skb) in pep_sendmsg()
1142 skb_reserve(skb, MAX_PHONET_HEADER + 3 + pn->aligned); in pep_sendmsg()
1143 err = memcpy_from_msg(skb_put(skb, len), msg, len); in pep_sendmsg()
1190 err = pipe_skb_send(sk, skb); in pep_sendmsg()
1193 skb = NULL; in pep_sendmsg()
1197 kfree_skb(skb); in pep_sendmsg()
1208 int pep_write(struct sock *sk, struct sk_buff *skb) in pep_write() argument
1214 return pipe_skb_send(sk, skb); in pep_write()
1218 kfree_skb(skb); in pep_write()
1221 skb_shinfo(rskb)->frag_list = skb; in pep_write()
1222 rskb->len += skb->len; in pep_write()
1227 skb_walk_frags(skb, fs) in pep_write()
1229 skb->next = skb_shinfo(skb)->frag_list; in pep_write()
1230 skb_frag_list_init(skb); in pep_write()
1231 skb->len -= flen; in pep_write()
1232 skb->data_len -= flen; in pep_write()
1233 skb->truesize -= flen; in pep_write()
1241 struct sk_buff *skb = skb_dequeue(&sk->sk_receive_queue); in pep_read() local
1245 return skb; in pep_read()
1251 struct sk_buff *skb; in pep_recvmsg() local
1267 skb = skb_dequeue(&pn->ctrlreq_queue); in pep_recvmsg()
1268 if (skb) { in pep_recvmsg()
1269 pep_ctrlreq_error(sk, skb, PN_PIPE_NO_ERROR, in pep_recvmsg()
1278 skb = skb_recv_datagram(sk, flags, noblock, &err); in pep_recvmsg()
1280 if (skb == NULL) { in pep_recvmsg()
1292 if (skb->len > len) in pep_recvmsg()
1295 len = skb->len; in pep_recvmsg()
1297 err = skb_copy_datagram_msg(skb, 0, msg, len); in pep_recvmsg()
1299 err = (flags & MSG_TRUNC) ? skb->len : len; in pep_recvmsg()
1301 skb_free_datagram(sk, skb); in pep_recvmsg()