As I am interested in tcp support for u-boot recently I will try to review your patches :)
> > To make it possible to add TCP versions of the same, while reusing > IP portions. This patch should not change any behavior. > > All references to TCP removed > Used most recent version of u-boot June 22 13, 2918 > Series to fix patman errors over Licensing declaration > END > > Series-notes > TCP with Selective Acknowledgment (SACK) is currently the protocol > with highest speed transfers, for fast multi-hop networks. > END > > Signed-off-by: Duncan Hare <d...@synoia.com> > Signed-off-by: Duncan Hare <duncanch...@yahoo.com> > --- > > include/net.h | 6 +++++- > net/net.c | 34 ++++++++++++++++++++++++---------- > net/ping.c | 7 +------ > 3 files changed, 30 insertions(+), 17 deletions(-) > > diff --git a/include/net.h b/include/net.h > index 5760685556..a54160fff6 100644 > --- a/include/net.h > +++ b/include/net.h > @@ -593,7 +593,8 @@ int net_set_ether(uchar *xet, const uchar *dest_ethaddr, > uint prot); > int net_update_ether(struct ethernet_hdr *et, uchar *addr, uint prot); > > /* Set IP header */ > -void net_set_ip_header(uchar *pkt, struct in_addr dest, struct in_addr > source); > +void net_set_ip_header(uchar *pkt, struct in_addr dest, struct in_addr > source, > + u16 pkt_len, u8 proto); > void net_set_udp_header(uchar *pkt, struct in_addr dest, int dport, > int sport, int len); > > @@ -667,6 +668,9 @@ static inline void net_send_packet(uchar *pkt, int len) > * @param sport Source UDP port > * @param payload_len Length of data after the UDP header > */ > +int net_send_ip_packet(uchar *ether, struct in_addr dest, int dport, int > sport, > + int payload_len, int proto, u8 action, u32 tcp_seq_num, > + u32 tcp_ack_num); > int net_send_udp_packet(uchar *ether, struct in_addr dest, int dport, > int sport, int payload_len); > > diff --git a/net/net.c b/net/net.c > index b4563a4cab..f831c34599 100644 > --- a/net/net.c > +++ b/net/net.c > @@ -786,6 +786,14 @@ void net_set_timeout_handler(ulong iv, thand_f *f) > int net_send_udp_packet(uchar *ether, struct in_addr dest, int dport, int > sport, > int payload_len) > { > +return net_send_ip_packet(ether, dest, dport, sport, payload_len, > + IPPROTO_UDP, 0, 0, 0); Missing tab before return net_... > +} > + > +int net_send_ip_packet(uchar *ether, struct in_addr dest, int dport, int > sport, > + int payload_len, int proto, u8 action, u32 tcp_seq_num, > + u32 tcp_ack_num) > +{ > uchar *pkt; > int eth_hdr_size; > int pkt_hdr_size; > @@ -806,9 +814,15 @@ int net_send_udp_packet(uchar *ether, struct in_addr > dest, int dport, int sport, > pkt = (uchar *)net_tx_packet; > > eth_hdr_size = net_set_ether(pkt, ether, PROT_IP); > - pkt += eth_hdr_size; > - net_set_udp_header(pkt, dest, dport, sport, payload_len); > - pkt_hdr_size = eth_hdr_size + IP_UDP_HDR_SIZE; > + > + switch (proto) { > + case IPPROTO_UDP: > + net_set_udp_header(pkt + eth_hdr_size, dest, > + dport, sport, payload_len); > + pkt_hdr_size = eth_hdr_size + IP_UDP_HDR_SIZE; > + break; > + default: return -EINVAL; > + } > > /* if MAC address was not discovered yet, do an ARP request */ > if (memcmp(ether, net_null_ethaddr, 6) == 0) { > @@ -1434,7 +1448,8 @@ int net_update_ether(struct ethernet_hdr *et, uchar > *addr, uint prot) > } > } > > -void net_set_ip_header(uchar *pkt, struct in_addr dest, struct in_addr > source) > +void net_set_ip_header(uchar *pkt, struct in_addr dest, struct in_addr > source, > + u16 pkt_len, u8 proto) > { > struct ip_udp_hdr *ip = (struct ip_udp_hdr *)pkt; > > @@ -1444,11 +1459,12 @@ void net_set_ip_header(uchar *pkt, struct in_addr > dest, struct in_addr source) > /* IP_HDR_SIZE / 4 (not including UDP) */ > ip->ip_hl_v = 0x45; > ip->ip_tos = 0; > - ip->ip_len = htons(IP_HDR_SIZE); > + ip->ip_len = htons(pkt_len); > + ip->ip_p = proto; > ip->ip_id = htons(net_ip_id++); > ip->ip_off = htons(IP_FLAGS_DFRAG); /* Don't fragment */ > ip->ip_ttl = 255; > - ip->ip_sum = 0; > + ip->ip_sum = compute_ip_checksum(ip, IP_HDR_SIZE); > /* already in network byte order */ > net_copy_ip((void *)&ip->ip_src, &source); > /* already in network byte order */ > @@ -1468,10 +1484,8 @@ void net_set_udp_header(uchar *pkt, struct in_addr > dest, int dport, int sport, > if (len & 1) > pkt[IP_UDP_HDR_SIZE + len] = 0; > > - net_set_ip_header(pkt, dest, net_ip); > - ip->ip_len = htons(IP_UDP_HDR_SIZE + len); > - ip->ip_p = IPPROTO_UDP; > - ip->ip_sum = compute_ip_checksum(ip, IP_HDR_SIZE); > + net_set_ip_header(pkt, dest, net_ip, IP_UDP_HDR_SIZE + len, > + IPPROTO_UDP); > > ip->udp_src = htons(sport); > ip->udp_dst = htons(dport); > diff --git a/net/ping.c b/net/ping.c > index 3e5461a36a..d5d914bf2a 100644 > --- a/net/ping.c > +++ b/net/ping.c > @@ -22,14 +22,9 @@ static void set_icmp_header(uchar *pkt, struct in_addr > dest) > /* > * Construct an IP and ICMP header. > */ > - struct ip_hdr *ip = (struct ip_hdr *)pkt; > struct icmp_hdr *icmp = (struct icmp_hdr *)(pkt + IP_HDR_SIZE); > > - net_set_ip_header(pkt, dest, net_ip); > - > - ip->ip_len = htons(IP_ICMP_HDR_SIZE); > - ip->ip_p = IPPROTO_ICMP; > - ip->ip_sum = compute_ip_checksum(ip, IP_HDR_SIZE); > + net_set_ip_header(pkt, dest, net_ip, IP_ICMP_HDR_SIZE, IPPROTO_ICMP); > > icmp->type = ICMP_ECHO_REQUEST; > icmp->code = 0; > -- > 2.11.0 > > _______________________________________________ > U-Boot mailing list > U-Boot@lists.denx.de > https://lists.denx.de/listinfo/u-boot -- greets -- Christian Gmeiner, MSc https://christian-gmeiner.info _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot