mirror of
https://xff.cz/git/u-boot/
synced 2025-09-01 08:42:12 +02:00
net: Add net_update_ether() to handle ARP and Ping replies
When the network is VLAN or SNAP, net_update_ether() will preserve the original Ethernet packet header and simply replace the src and dest MACs and the protocol Signed-off-by: Joe Hershberger <joe.hershberger@ni.com> Acked-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
23
net/net.c
23
net/net.c
@@ -1276,6 +1276,29 @@ NetSetEther(uchar *xet, uchar * addr, uint prot)
|
||||
}
|
||||
}
|
||||
|
||||
int net_update_ether(struct ethernet_hdr *et, uchar *addr, uint prot)
|
||||
{
|
||||
ushort protlen;
|
||||
|
||||
memcpy(et->et_dest, addr, 6);
|
||||
memcpy(et->et_src, NetOurEther, 6);
|
||||
protlen = ntohs(et->et_protlen);
|
||||
if (protlen == PROT_VLAN) {
|
||||
struct vlan_ethernet_hdr *vet =
|
||||
(struct vlan_ethernet_hdr *)et;
|
||||
vet->vet_type = htons(prot);
|
||||
return VLAN_ETHER_HDR_SIZE;
|
||||
} else if (protlen > 1514) {
|
||||
et->et_protlen = htons(prot);
|
||||
return ETHER_HDR_SIZE;
|
||||
} else {
|
||||
/* 802.2 + SNAP */
|
||||
struct e802_hdr *et802 = (struct e802_hdr *)et;
|
||||
et802->et_prot = htons(prot);
|
||||
return E802_HDR_SIZE;
|
||||
}
|
||||
}
|
||||
|
||||
void net_set_ip_header(uchar *pkt, IPaddr_t dest, IPaddr_t source)
|
||||
{
|
||||
struct ip_udp_hdr *ip = (struct ip_udp_hdr *)pkt;
|
||||
|
Reference in New Issue
Block a user