Lines Matching refs:event
46 static void sctp_ulpevent_receive_data(struct sctp_ulpevent *event,
48 static void sctp_ulpevent_release_data(struct sctp_ulpevent *event);
49 static void sctp_ulpevent_release_frag_data(struct sctp_ulpevent *event);
53 static void sctp_ulpevent_init(struct sctp_ulpevent *event, in sctp_ulpevent_init() argument
57 memset(event, 0, sizeof(struct sctp_ulpevent)); in sctp_ulpevent_init()
58 event->msg_flags = msg_flags; in sctp_ulpevent_init()
59 event->rmem_len = len; in sctp_ulpevent_init()
66 struct sctp_ulpevent *event; in sctp_ulpevent_new() local
73 event = sctp_skb2event(skb); in sctp_ulpevent_new()
74 sctp_ulpevent_init(event, msg_flags, skb->truesize); in sctp_ulpevent_new()
76 return event; in sctp_ulpevent_new()
83 int sctp_ulpevent_is_notification(const struct sctp_ulpevent *event) in sctp_ulpevent_is_notification() argument
85 return MSG_NOTIFICATION == (event->msg_flags & MSG_NOTIFICATION); in sctp_ulpevent_is_notification()
91 static inline void sctp_ulpevent_set_owner(struct sctp_ulpevent *event, in sctp_ulpevent_set_owner() argument
100 skb = sctp_event2skb(event); in sctp_ulpevent_set_owner()
101 event->asoc = (struct sctp_association *)asoc; in sctp_ulpevent_set_owner()
102 atomic_add(event->rmem_len, &event->asoc->rmem_alloc); in sctp_ulpevent_set_owner()
107 static inline void sctp_ulpevent_release_owner(struct sctp_ulpevent *event) in sctp_ulpevent_release_owner() argument
109 struct sctp_association *asoc = event->asoc; in sctp_ulpevent_release_owner()
111 atomic_sub(event->rmem_len, &asoc->rmem_alloc); in sctp_ulpevent_release_owner()
131 struct sctp_ulpevent *event; in sctp_ulpevent_make_assoc_change() local
149 event = sctp_skb2event(skb); in sctp_ulpevent_make_assoc_change()
150 sctp_ulpevent_init(event, MSG_NOTIFICATION, skb->truesize); in sctp_ulpevent_make_assoc_change()
161 event = sctp_ulpevent_new(sizeof(struct sctp_assoc_change), in sctp_ulpevent_make_assoc_change()
163 if (!event) in sctp_ulpevent_make_assoc_change()
166 skb = sctp_event2skb(event); in sctp_ulpevent_make_assoc_change()
238 sctp_ulpevent_set_owner(event, asoc); in sctp_ulpevent_make_assoc_change()
241 return event; in sctp_ulpevent_make_assoc_change()
260 struct sctp_ulpevent *event; in sctp_ulpevent_make_peer_addr_change() local
264 event = sctp_ulpevent_new(sizeof(struct sctp_paddr_change), in sctp_ulpevent_make_peer_addr_change()
266 if (!event) in sctp_ulpevent_make_peer_addr_change()
269 skb = sctp_event2skb(event); in sctp_ulpevent_make_peer_addr_change()
330 sctp_ulpevent_set_owner(event, asoc); in sctp_ulpevent_make_peer_addr_change()
348 return event; in sctp_ulpevent_make_peer_addr_change()
374 struct sctp_ulpevent *event; in sctp_ulpevent_make_remote_error() local
399 event = sctp_skb2event(skb); in sctp_ulpevent_make_remote_error()
400 sctp_ulpevent_init(event, MSG_NOTIFICATION, skb->truesize); in sctp_ulpevent_make_remote_error()
413 sctp_ulpevent_set_owner(event, asoc); in sctp_ulpevent_make_remote_error()
416 return event; in sctp_ulpevent_make_remote_error()
430 struct sctp_ulpevent *event; in sctp_ulpevent_make_send_failed() local
450 event = sctp_skb2event(skb); in sctp_ulpevent_make_send_failed()
451 sctp_ulpevent_init(event, MSG_NOTIFICATION, skb->truesize); in sctp_ulpevent_make_send_failed()
522 sctp_ulpevent_set_owner(event, asoc); in sctp_ulpevent_make_send_failed()
524 return event; in sctp_ulpevent_make_send_failed()
539 struct sctp_ulpevent *event; in sctp_ulpevent_make_shutdown_event() local
543 event = sctp_ulpevent_new(sizeof(struct sctp_shutdown_event), in sctp_ulpevent_make_shutdown_event()
545 if (!event) in sctp_ulpevent_make_shutdown_event()
548 skb = sctp_event2skb(event); in sctp_ulpevent_make_shutdown_event()
585 sctp_ulpevent_set_owner(event, asoc); in sctp_ulpevent_make_shutdown_event()
588 return event; in sctp_ulpevent_make_shutdown_event()
602 struct sctp_ulpevent *event; in sctp_ulpevent_make_adaptation_indication() local
606 event = sctp_ulpevent_new(sizeof(struct sctp_adaptation_event), in sctp_ulpevent_make_adaptation_indication()
608 if (!event) in sctp_ulpevent_make_adaptation_indication()
611 skb = sctp_event2skb(event); in sctp_ulpevent_make_adaptation_indication()
619 sctp_ulpevent_set_owner(event, asoc); in sctp_ulpevent_make_adaptation_indication()
622 return event; in sctp_ulpevent_make_adaptation_indication()
639 struct sctp_ulpevent *event = NULL; in sctp_ulpevent_make_rcvmsg() local
694 event = sctp_skb2event(skb); in sctp_ulpevent_make_rcvmsg()
700 sctp_ulpevent_init(event, 0, skb->len + sizeof(struct sk_buff)); in sctp_ulpevent_make_rcvmsg()
702 sctp_ulpevent_receive_data(event, asoc); in sctp_ulpevent_make_rcvmsg()
704 event->stream = ntohs(chunk->subh.data_hdr->stream); in sctp_ulpevent_make_rcvmsg()
705 event->ssn = ntohs(chunk->subh.data_hdr->ssn); in sctp_ulpevent_make_rcvmsg()
706 event->ppid = chunk->subh.data_hdr->ppid; in sctp_ulpevent_make_rcvmsg()
708 event->flags |= SCTP_UNORDERED; in sctp_ulpevent_make_rcvmsg()
709 event->cumtsn = sctp_tsnmap_get_ctsn(&asoc->peer.tsn_map); in sctp_ulpevent_make_rcvmsg()
711 event->tsn = ntohl(chunk->subh.data_hdr->tsn); in sctp_ulpevent_make_rcvmsg()
712 event->msg_flags |= chunk->chunk_hdr->flags; in sctp_ulpevent_make_rcvmsg()
713 event->iif = sctp_chunk_iif(chunk); in sctp_ulpevent_make_rcvmsg()
715 return event; in sctp_ulpevent_make_rcvmsg()
735 struct sctp_ulpevent *event; in sctp_ulpevent_make_pdapi() local
739 event = sctp_ulpevent_new(sizeof(struct sctp_pdapi_event), in sctp_ulpevent_make_pdapi()
741 if (!event) in sctp_ulpevent_make_pdapi()
744 skb = sctp_event2skb(event); in sctp_ulpevent_make_pdapi()
775 sctp_ulpevent_set_owner(event, asoc); in sctp_ulpevent_make_pdapi()
778 return event; in sctp_ulpevent_make_pdapi()
787 struct sctp_ulpevent *event; in sctp_ulpevent_make_authkey() local
791 event = sctp_ulpevent_new(sizeof(struct sctp_authkey_event), in sctp_ulpevent_make_authkey()
793 if (!event) in sctp_ulpevent_make_authkey()
796 skb = sctp_event2skb(event); in sctp_ulpevent_make_authkey()
811 sctp_ulpevent_set_owner(event, asoc); in sctp_ulpevent_make_authkey()
814 return event; in sctp_ulpevent_make_authkey()
826 struct sctp_ulpevent *event; in sctp_ulpevent_make_sender_dry_event() local
830 event = sctp_ulpevent_new(sizeof(struct sctp_sender_dry_event), in sctp_ulpevent_make_sender_dry_event()
832 if (!event) in sctp_ulpevent_make_sender_dry_event()
835 skb = sctp_event2skb(event); in sctp_ulpevent_make_sender_dry_event()
842 sctp_ulpevent_set_owner(event, asoc); in sctp_ulpevent_make_sender_dry_event()
845 return event; in sctp_ulpevent_make_sender_dry_event()
851 __u16 sctp_ulpevent_get_notification_type(const struct sctp_ulpevent *event) in sctp_ulpevent_get_notification_type() argument
856 skb = sctp_event2skb(event); in sctp_ulpevent_get_notification_type()
864 void sctp_ulpevent_read_sndrcvinfo(const struct sctp_ulpevent *event, in sctp_ulpevent_read_sndrcvinfo() argument
869 if (sctp_ulpevent_is_notification(event)) in sctp_ulpevent_read_sndrcvinfo()
873 sinfo.sinfo_stream = event->stream; in sctp_ulpevent_read_sndrcvinfo()
874 sinfo.sinfo_ssn = event->ssn; in sctp_ulpevent_read_sndrcvinfo()
875 sinfo.sinfo_ppid = event->ppid; in sctp_ulpevent_read_sndrcvinfo()
876 sinfo.sinfo_flags = event->flags; in sctp_ulpevent_read_sndrcvinfo()
877 sinfo.sinfo_tsn = event->tsn; in sctp_ulpevent_read_sndrcvinfo()
878 sinfo.sinfo_cumtsn = event->cumtsn; in sctp_ulpevent_read_sndrcvinfo()
879 sinfo.sinfo_assoc_id = sctp_assoc2id(event->asoc); in sctp_ulpevent_read_sndrcvinfo()
881 sinfo.sinfo_context = event->asoc->default_rcv_context; in sctp_ulpevent_read_sndrcvinfo()
892 void sctp_ulpevent_read_rcvinfo(const struct sctp_ulpevent *event, in sctp_ulpevent_read_rcvinfo() argument
897 if (sctp_ulpevent_is_notification(event)) in sctp_ulpevent_read_rcvinfo()
901 rinfo.rcv_sid = event->stream; in sctp_ulpevent_read_rcvinfo()
902 rinfo.rcv_ssn = event->ssn; in sctp_ulpevent_read_rcvinfo()
903 rinfo.rcv_ppid = event->ppid; in sctp_ulpevent_read_rcvinfo()
904 rinfo.rcv_flags = event->flags; in sctp_ulpevent_read_rcvinfo()
905 rinfo.rcv_tsn = event->tsn; in sctp_ulpevent_read_rcvinfo()
906 rinfo.rcv_cumtsn = event->cumtsn; in sctp_ulpevent_read_rcvinfo()
907 rinfo.rcv_assoc_id = sctp_assoc2id(event->asoc); in sctp_ulpevent_read_rcvinfo()
908 rinfo.rcv_context = event->asoc->default_rcv_context; in sctp_ulpevent_read_rcvinfo()
917 static void __sctp_ulpevent_read_nxtinfo(const struct sctp_ulpevent *event, in __sctp_ulpevent_read_nxtinfo() argument
924 nxtinfo.nxt_sid = event->stream; in __sctp_ulpevent_read_nxtinfo()
925 nxtinfo.nxt_ppid = event->ppid; in __sctp_ulpevent_read_nxtinfo()
926 nxtinfo.nxt_flags = event->flags; in __sctp_ulpevent_read_nxtinfo()
927 if (sctp_ulpevent_is_notification(event)) in __sctp_ulpevent_read_nxtinfo()
930 nxtinfo.nxt_assoc_id = sctp_assoc2id(event->asoc); in __sctp_ulpevent_read_nxtinfo()
936 void sctp_ulpevent_read_nxtinfo(const struct sctp_ulpevent *event, in sctp_ulpevent_read_nxtinfo() argument
955 static void sctp_ulpevent_receive_data(struct sctp_ulpevent *event, in sctp_ulpevent_receive_data() argument
960 skb = sctp_event2skb(event); in sctp_ulpevent_receive_data()
962 sctp_ulpevent_set_owner(event, asoc); in sctp_ulpevent_receive_data()
981 static void sctp_ulpevent_release_data(struct sctp_ulpevent *event) in sctp_ulpevent_release_data() argument
993 skb = sctp_event2skb(event); in sctp_ulpevent_release_data()
1009 sctp_assoc_rwnd_increase(event->asoc, len); in sctp_ulpevent_release_data()
1010 sctp_ulpevent_release_owner(event); in sctp_ulpevent_release_data()
1013 static void sctp_ulpevent_release_frag_data(struct sctp_ulpevent *event) in sctp_ulpevent_release_frag_data() argument
1017 skb = sctp_event2skb(event); in sctp_ulpevent_release_frag_data()
1032 sctp_ulpevent_release_owner(event); in sctp_ulpevent_release_frag_data()
1039 void sctp_ulpevent_free(struct sctp_ulpevent *event) in sctp_ulpevent_free() argument
1041 if (sctp_ulpevent_is_notification(event)) in sctp_ulpevent_free()
1042 sctp_ulpevent_release_owner(event); in sctp_ulpevent_free()
1044 sctp_ulpevent_release_data(event); in sctp_ulpevent_free()
1046 kfree_skb(sctp_event2skb(event)); in sctp_ulpevent_free()
1056 struct sctp_ulpevent *event = sctp_skb2event(skb); in sctp_queue_purge_ulpevents() local
1058 if (!sctp_ulpevent_is_notification(event)) in sctp_queue_purge_ulpevents()
1061 sctp_ulpevent_free(event); in sctp_queue_purge_ulpevents()