On Thu, Dec 13, 2018 at 04:31:17PM +0100, Oleksij Rempel wrote: > The ETP transfer can be as big as 112 MiB. The challenge is to keep easy > socket programming model, support 112 MiB MTU and not consume insane > amount of resources. > > With this patch set, kernel do not need to copy complete 112 MiB packet in one > run. It will by copied from user space by kernel in small chunks (max > 1785 Byte, which is equal to maximal TP size) and added to the session > skb queue. The size of skb queue is limited to wmem size. As soon as one > skb is transceived and confirmed by receiver, it is removed from the skb > queue and other portion of data can be copied from userspace. > > For testing I wrote small too called jcat (netcat for j1939). I'll > clean it up and send pull request for can utils, with hope you'll do > more testing and bug hunting. > > The test setup was configured like this: > # on sender and receiver: > ip link set can0 type can bitrate 250000 > ip link set up can0 > # on receiver: > jcat can0:0x90 -r > /tmp/bla > > #on sender: > jcat -i /my_test_image can0:0x80 :0x90,0x12300 > > as you can see, the sender is not using stdin. For proper ETP testing > we need to know size of the transfer. On other hand it should be > possible to implement stdin as well, just for fun or for use in cases > like socat. jcat can be found here: https://github.com/linux-can/can-utils/pull/114 > Oleksij Rempel (40): > j1939: rework j1939_send data path > j1939: transport: rework TP size check > j1939: move j1939_tp_max_packet_size to priv > j1939: transport: add j1939_xtp_rx_rts_new() function > j1939: transport: add j1939_xtp_rx_rts_current() function > j1939: transport: j1939_xtp_rx_rts: remove useless check > j1939: transport add warning for j1939_xtp_rx_rts_current() > j1939: transport: j1939_tp_send(): fix skb refcounting > j1939: transport: warn if skb can't be freed in > j1939_session_destroy() > j1939: socket: make sure all sessions are finished on close > j1939: transport: rework j1939_xtp_rx_bad_message_one > j1939: transport: move j1939_sessionq() the the > j1939_session_get_by_skb() > j1939: transport: simplify j1939_session_list_unlock() > j1939: transport: move TP_CMD related code to j1939_tp_cmd_recv() > j1939: transport: move most of j1939_session_get_by_skb to the > j1939_tp_cmd_recv > j1939: transport: use per session skcb > j1939: transport: use session->total_message_size instead of skb->len > j1939: transport: document packet related variables > j1939: add ofsset to j1939_sk_buff_cb > j1939: transport: remove useless ifindex check > j1939: transport: don't use can_skb_prv(session->skb)->ifindex with > netdev_alert > j1939: transport: add multi skb support > j1939: socket: add j1939_sk_alloc_skb() > j1939: socket: add j1939_sk_send_multi() and j1939_sk_send_one() > j1939: allow to use session by socket code > j1939: transport: don't use skb->len > j1939: socket: j1939_sk_send_multi: start using skb queue > j1939: transport: print last command in j1939_xtp_rx_rts_current in > cases of error > j1939: transport: use skcb instead of skb in transmitter or receiver > related functions > j1939: transport: rework j1939_session_fresh_new and > j1939_tp_tx_dat_new paths > j1939: transport: remove unused j1939_session_skb_find > j1939: transport: use skcb instead of skb in > j1939_tp_im_involved_anydir() > j1939: transport: remove useless check in j1939_session_cancel > j1939: transport: rework j1939_xtp_do_tx_ctl() path > j1939: transport: reduce use of j1939_session_skb_find in > j1939_tp_txnext > j1939: move j1939_socks socket list to the priv > j1939: transport: use skbc instead of skb in j1939_session_match() > path > j1939: link sock to the session > j1939: transport: remove rest of ifindex calls from netdev_* prints > j1939: bus: drop ecu_dbg > > net/can/j1939/bus.c | 8 - > net/can/j1939/j1939-priv.h | 94 +++- > net/can/j1939/main.c | 26 +- > net/can/j1939/socket.c | 240 ++++++---- > net/can/j1939/transport.c | 868 ++++++++++++++++++++----------------- > 5 files changed, 719 insertions(+), 517 deletions(-) > > -- > 2.19.1 > > -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
Attachment:
signature.asc
Description: PGP signature