@@ -283,14 +283,11 @@ struct rxrpc_local {
283283 struct rxrpc_net * rxnet ; /* The network ns in which this resides */
284284 struct hlist_node link ;
285285 struct socket * socket ; /* my UDP socket */
286- struct work_struct processor ;
287286 struct task_struct * io_thread ;
288287 struct list_head ack_tx_queue ; /* List of ACKs that need sending */
289288 spinlock_t ack_tx_lock ; /* ACK list lock */
290289 struct rxrpc_sock __rcu * service ; /* Service(s) listening on this endpoint */
291290 struct rw_semaphore defrag_sem ; /* control re-enablement of IP DF bit */
292- struct sk_buff_head reject_queue ; /* packets awaiting rejection */
293- struct sk_buff_head event_queue ; /* endpoint event packets awaiting processing */
294291 struct sk_buff_head rx_queue ; /* Received packets */
295292 struct list_head call_attend_q ; /* Calls requiring immediate attention */
296293 struct rb_root client_bundles ; /* Client connection bundles by socket params */
@@ -524,23 +521,19 @@ enum rxrpc_call_flag {
524521 RXRPC_CALL_RETRANS_TIMEOUT , /* Retransmission due to timeout occurred */
525522 RXRPC_CALL_BEGAN_RX_TIMER , /* We began the expect_rx_by timer */
526523 RXRPC_CALL_RX_HEARD , /* The peer responded at least once to this call */
527- RXRPC_CALL_RX_UNDERRUN , /* Got data underrun */
528524 RXRPC_CALL_DISCONNECTED , /* The call has been disconnected */
529525 RXRPC_CALL_KERNEL , /* The call was made by the kernel */
530526 RXRPC_CALL_UPGRADE , /* Service upgrade was requested for the call */
531- RXRPC_CALL_DELAY_ACK_PENDING , /* DELAY ACK generation is pending */
532- RXRPC_CALL_IDLE_ACK_PENDING , /* IDLE ACK generation is pending */
533527 RXRPC_CALL_EXCLUSIVE , /* The call uses a once-only connection */
528+ RXRPC_CALL_RX_IS_IDLE , /* Reception is idle - send an ACK */
534529};
535530
536531/*
537532 * Events that can be raised on a call.
538533 */
539534enum rxrpc_call_event {
540- RXRPC_CALL_EV_ABORT , /* need to generate abort */
541- RXRPC_CALL_EV_RESEND , /* Tx resend required */
542- RXRPC_CALL_EV_EXPIRED , /* Expiry occurred */
543535 RXRPC_CALL_EV_ACK_LOST , /* ACK may be lost, send ping */
536+ RXRPC_CALL_EV_INITIAL_PING , /* Send initial ping for a new service call */
544537};
545538
546539/*
@@ -611,7 +604,6 @@ struct rxrpc_call {
611604 u32 next_rx_timo ; /* Timeout for next Rx packet (jif) */
612605 u32 next_req_timo ; /* Timeout for next Rx request packet (jif) */
613606 struct timer_list timer ; /* Combined event timer */
614- struct work_struct processor ; /* Event processor */
615607 struct work_struct destroyer ; /* In-process-context destroyer */
616608 rxrpc_notify_rx_t notify_rx ; /* kernel service Rx notification function */
617609 struct list_head link ; /* link in master call list */
@@ -705,11 +697,7 @@ struct rxrpc_call {
705697 rxrpc_seq_t acks_prev_seq ; /* Highest previousPacket received */
706698 rxrpc_seq_t acks_hard_ack ; /* Latest hard-ack point */
707699 rxrpc_seq_t acks_lowest_nak ; /* Lowest NACK in the buffer (or ==tx_hard_ack) */
708- rxrpc_seq_t acks_lost_top ; /* tx_top at the time lost-ack ping sent */
709- rxrpc_serial_t acks_lost_ping ; /* Serial number of probe ACK */
710700 rxrpc_serial_t acks_highest_serial ; /* Highest serial number ACK'd */
711- struct sk_buff * acks_soft_tbl ; /* The last ACK packet with NAKs in it */
712- spinlock_t acks_ack_lock ; /* Access to ->acks_last_ack */
713701};
714702
715703/*
@@ -822,10 +810,9 @@ extern struct workqueue_struct *rxrpc_workqueue;
822810 */
823811int rxrpc_service_prealloc (struct rxrpc_sock * , gfp_t );
824812void rxrpc_discard_prealloc (struct rxrpc_sock * );
825- struct rxrpc_call * rxrpc_new_incoming_call (struct rxrpc_local * ,
826- struct rxrpc_sock * ,
827- struct sockaddr_rxrpc * ,
828- struct sk_buff * );
813+ bool rxrpc_new_incoming_call (struct rxrpc_local * , struct rxrpc_peer * ,
814+ struct rxrpc_connection * , struct sockaddr_rxrpc * ,
815+ struct sk_buff * );
829816void rxrpc_accept_incoming_calls (struct rxrpc_local * );
830817int rxrpc_user_charge_accept (struct rxrpc_sock * , unsigned long );
831818
@@ -838,13 +825,15 @@ void rxrpc_send_ACK(struct rxrpc_call *, u8, rxrpc_serial_t, enum rxrpc_propose_
838825void rxrpc_propose_delay_ACK (struct rxrpc_call * , rxrpc_serial_t ,
839826 enum rxrpc_propose_ack_trace );
840827void rxrpc_shrink_call_tx_buffer (struct rxrpc_call * );
841- void rxrpc_process_call (struct work_struct * );
828+ void rxrpc_resend (struct rxrpc_call * call , struct sk_buff * ack_skb );
842829
843830void rxrpc_reduce_call_timer (struct rxrpc_call * call ,
844831 unsigned long expire_at ,
845832 unsigned long now ,
846833 enum rxrpc_timer_trace why );
847834
835+ void rxrpc_input_call_event (struct rxrpc_call * call , struct sk_buff * skb );
836+
848837/*
849838 * call_object.c
850839 */
@@ -864,9 +853,8 @@ void rxrpc_incoming_call(struct rxrpc_sock *, struct rxrpc_call *,
864853 struct sk_buff * );
865854void rxrpc_release_call (struct rxrpc_sock * , struct rxrpc_call * );
866855void rxrpc_release_calls_on_socket (struct rxrpc_sock * );
867- void rxrpc_queue_call (struct rxrpc_call * , enum rxrpc_call_trace );
868856void rxrpc_see_call (struct rxrpc_call * , enum rxrpc_call_trace );
869- bool rxrpc_try_get_call (struct rxrpc_call * , enum rxrpc_call_trace );
857+ struct rxrpc_call * rxrpc_try_get_call (struct rxrpc_call * , enum rxrpc_call_trace );
870858void rxrpc_get_call (struct rxrpc_call * , enum rxrpc_call_trace );
871859void rxrpc_put_call (struct rxrpc_call * , enum rxrpc_call_trace );
872860void rxrpc_cleanup_call (struct rxrpc_call * );
@@ -908,6 +896,7 @@ void rxrpc_clean_up_local_conns(struct rxrpc_local *);
908896 */
909897void rxrpc_process_connection (struct work_struct * );
910898void rxrpc_process_delayed_final_acks (struct rxrpc_connection * , bool );
899+ int rxrpc_input_conn_packet (struct rxrpc_connection * conn , struct sk_buff * skb );
911900
912901/*
913902 * conn_object.c
@@ -916,10 +905,9 @@ extern unsigned int rxrpc_connection_expiry;
916905extern unsigned int rxrpc_closed_conn_expiry ;
917906
918907struct rxrpc_connection * rxrpc_alloc_connection (struct rxrpc_net * , gfp_t );
919- struct rxrpc_connection * rxrpc_find_connection_rcu (struct rxrpc_local * ,
920- struct sockaddr_rxrpc * ,
921- struct sk_buff * ,
922- struct rxrpc_peer * * );
908+ struct rxrpc_connection * rxrpc_find_client_connection_rcu (struct rxrpc_local * ,
909+ struct sockaddr_rxrpc * ,
910+ struct sk_buff * );
923911void __rxrpc_disconnect_call (struct rxrpc_connection * , struct rxrpc_call * );
924912void rxrpc_disconnect_call (struct rxrpc_call * );
925913void rxrpc_kill_client_conn (struct rxrpc_connection * );
@@ -962,8 +950,8 @@ void rxrpc_unpublish_service_conn(struct rxrpc_connection *);
962950/*
963951 * input.c
964952 */
965- void rxrpc_input_call_event (struct rxrpc_call * , struct sk_buff * );
966- void rxrpc_input_implicit_end_call (struct rxrpc_connection * , struct rxrpc_call * );
953+ void rxrpc_input_call_packet (struct rxrpc_call * , struct sk_buff * );
954+ void rxrpc_implicit_end_call (struct rxrpc_call * , struct sk_buff * );
967955
968956/*
969957 * io_thread.c
@@ -993,7 +981,9 @@ int rxrpc_get_server_data_key(struct rxrpc_connection *, const void *, time64_t,
993981/*
994982 * local_event.c
995983 */
996- extern void rxrpc_process_local_events (struct rxrpc_local * );
984+ void rxrpc_send_version_request (struct rxrpc_local * local ,
985+ struct rxrpc_host_header * hdr ,
986+ struct sk_buff * skb );
997987
998988/*
999989 * local_object.c
@@ -1004,7 +994,6 @@ struct rxrpc_local *rxrpc_get_local_maybe(struct rxrpc_local *, enum rxrpc_local
1004994void rxrpc_put_local (struct rxrpc_local * , enum rxrpc_local_trace );
1005995struct rxrpc_local * rxrpc_use_local (struct rxrpc_local * , enum rxrpc_local_trace );
1006996void rxrpc_unuse_local (struct rxrpc_local * , enum rxrpc_local_trace );
1007- void rxrpc_queue_local (struct rxrpc_local * );
1008997void rxrpc_destroy_local (struct rxrpc_local * local );
1009998void rxrpc_destroy_all_locals (struct rxrpc_net * );
1010999
@@ -1068,7 +1057,7 @@ static inline struct rxrpc_net *rxrpc_net(struct net *net)
10681057void rxrpc_transmit_ack_packets (struct rxrpc_local * );
10691058int rxrpc_send_abort_packet (struct rxrpc_call * );
10701059int rxrpc_send_data_packet (struct rxrpc_call * , struct rxrpc_txbuf * );
1071- void rxrpc_reject_packets (struct rxrpc_local * );
1060+ void rxrpc_reject_packet (struct rxrpc_local * local , struct sk_buff * skb );
10721061void rxrpc_send_keepalive (struct rxrpc_peer * );
10731062void rxrpc_transmit_one (struct rxrpc_call * call , struct rxrpc_txbuf * txb );
10741063
@@ -1178,7 +1167,6 @@ int rxrpc_server_keyring(struct rxrpc_sock *, sockptr_t, int);
11781167 * skbuff.c
11791168 */
11801169void rxrpc_kernel_data_consumed (struct rxrpc_call * , struct sk_buff * );
1181- void rxrpc_packet_destructor (struct sk_buff * );
11821170void rxrpc_new_skb (struct sk_buff * , enum rxrpc_skb_trace );
11831171void rxrpc_see_skb (struct sk_buff * , enum rxrpc_skb_trace );
11841172void rxrpc_eaten_skb (struct sk_buff * , enum rxrpc_skb_trace );
0 commit comments