
Separate the Ethernet header from the 802 header. Base the size constants on the structs.
Signed-off-by: Joe Hershberger joe.hershberger@ni.com Cc: Joe Hershberger joe.hershberger@gmail.com --- Changes for v2: - Split apart from "Un-typedef variables in net" - Created a new E802_hdr struct and removed 802 members from Ethernet_hdr - Renamed structs from *_t to *_hdr since they are nolonger types - Replaced offsetof(Ethernet_t, et_dsap) with ETHER_HDR_SIZE in arch/powerpc/cpu/mpc8260/ether_fcc.c Changes for v3: - Renamed Ethernet_hdr to ethernet_hdr - Renamed E802_hdr to e802_hdr
arch/powerpc/cpu/mpc8260/ether_fcc.c | 17 ++++++++--------- include/net.h | 18 ++++++++++++++---- net/arp.c | 4 ++-- net/arp.h | 2 +- net/bootp.c | 2 +- net/cdp.c | 4 ++-- net/net.c | 11 ++++++----- net/ping.c | 2 +- net/ping.h | 2 +- 9 files changed, 36 insertions(+), 26 deletions(-)
diff --git a/arch/powerpc/cpu/mpc8260/ether_fcc.c b/arch/powerpc/cpu/mpc8260/ether_fcc.c index 879ec0e..0eb74d4 100644 --- a/arch/powerpc/cpu/mpc8260/ether_fcc.c +++ b/arch/powerpc/cpu/mpc8260/ether_fcc.c @@ -1049,11 +1049,11 @@ eth_loopback_test (void) } else { ushort datlen = bdp->cbd_datlen; - Ethernet_t *ehp; + struct ethernet_hdr *ehp; ushort prot; int ours, tb, n, nbytes;
- ehp = (Ethernet_t *) \ + ehp = (struct ethernet_hdr *) \ &ecp->rxbufs[i][0];
ours = memcmp (ehp->et_src, \ @@ -1063,9 +1063,8 @@ eth_loopback_test (void) tb = prot & 0x8000; n = prot & 0x7fff;
- nbytes = ELBT_BUFSZ - \ - offsetof (Ethernet_t, \ - et_dsap) - \ + nbytes = ELBT_BUFSZ - + ETHER_HDR_SIZE - ELBT_CRCSZ;
/* check the frame is correct */ @@ -1080,10 +1079,10 @@ eth_loopback_test (void) patwords[n]; uint nbb;
- nbb = badbits ( \ - &ehp->et_dsap, \ - nbytes, \ - patword); + nbb = badbits( + ((uchar *)&ehp) + + ETHER_HDR_SIZE, + nbytes, patword);
ecp->rxeacc.badbit += \ nbb; diff --git a/include/net.h b/include/net.h index 7692153..2551516 100644 --- a/include/net.h +++ b/include/net.h @@ -156,7 +156,17 @@ u32 ether_crc(size_t len, unsigned char const *p); /* * Ethernet header */ -typedef struct { + +struct ethernet_hdr { + uchar et_dest[6]; /* Destination node */ + uchar et_src[6]; /* Source node */ + ushort et_protlen; /* Protocol or length */ +}; + +/* Ethernet header size */ +#define ETHER_HDR_SIZE (sizeof(struct ethernet_hdr)) + +struct e802_hdr { uchar et_dest[6]; /* Destination node */ uchar et_src[6]; /* Source node */ ushort et_protlen; /* Protocol or length */ @@ -167,10 +177,10 @@ typedef struct { uchar et_snap2; uchar et_snap3; ushort et_prot; /* 802 protocol */ -} Ethernet_t; +};
-#define ETHER_HDR_SIZE 14 /* Ethernet header size */ -#define E802_HDR_SIZE 22 /* 802 ethernet header size */ +/* 802 ethernet header size */ +#define E802_HDR_SIZE (sizeof(struct e802_hdr))
/* * Ethernet header diff --git a/net/arp.c b/net/arp.c index 03272ad..c3def63 100644 --- a/net/arp.c +++ b/net/arp.c @@ -113,7 +113,7 @@ void ArpTimeoutCheck(void) } }
-void ArpReceive(Ethernet_t *et, struct ip_udp_hdr *ip, int len) +void ArpReceive(struct ethernet_hdr *et, struct ip_udp_hdr *ip, int len) { ARP_t *arp; IPaddr_t tmp; @@ -193,7 +193,7 @@ void ArpReceive(Ethernet_t *et, struct ip_udp_hdr *ip, int len) NetGetHandler()(0, 0, 0, 0, 0); #endif /* modify header, and transmit it */ - memcpy(((Ethernet_t *)NetArpWaitTxPacket)-> + memcpy(((struct ethernet_hdr *)NetArpWaitTxPacket)-> et_dest, NetArpWaitPacketMAC, 6); (void) eth_send(NetArpWaitTxPacket, NetArpWaitTxPacketSize); diff --git a/net/arp.h b/net/arp.h index b59fbdd..b7a1ac9 100644 --- a/net/arp.h +++ b/net/arp.h @@ -25,6 +25,6 @@ extern int NetArpWaitTry; void ArpInit(void); void ArpRequest(void); void ArpTimeoutCheck(void); -void ArpReceive(Ethernet_t *et, struct ip_udp_hdr *ip, int len); +void ArpReceive(struct ethernet_hdr *et, struct ip_udp_hdr *ip, int len);
#endif /* __ARP_H__ */ diff --git a/net/bootp.c b/net/bootp.c index b8d2760..3285250 100644 --- a/net/bootp.c +++ b/net/bootp.c @@ -103,7 +103,7 @@ static void BootpCopyNetParams(struct Bootp_t *bp) NetCopyIP(&tmp_ip, &bp->bp_siaddr); if (tmp_ip != 0) NetCopyIP(&NetServerIP, &bp->bp_siaddr); - memcpy(NetServerEther, ((Ethernet_t *)NetRxPacket)->et_src, 6); + memcpy(NetServerEther, ((struct ethernet_hdr *)NetRxPacket)->et_src, 6); #endif if (strlen(bp->bp_file) > 0) copy_filename(BootFile, bp->bp_file, sizeof(BootFile)); diff --git a/net/cdp.c b/net/cdp.c index 004aae2..63be570 100644 --- a/net/cdp.c +++ b/net/cdp.c @@ -109,7 +109,7 @@ CDPSendTrigger(void) uchar *pkt; ushort *s; ushort *cp; - Ethernet_t *et; + struct ethernet_hdr *et; int len; ushort chksum; #if defined(CONFIG_CDP_DEVICE_ID) || defined(CONFIG_CDP_PORT_ID) || \ @@ -118,7 +118,7 @@ CDPSendTrigger(void) #endif
pkt = NetTxPacket; - et = (Ethernet_t *)pkt; + et = (struct ethernet_hdr *)pkt;
/* NOTE: trigger sent not on any VLAN */
diff --git a/net/net.c b/net/net.c index 2bf5631..33de399 100644 --- a/net/net.c +++ b/net/net.c @@ -823,7 +823,7 @@ static inline struct ip_udp_hdr *NetDefragment(struct ip_udp_hdr *ip, int *lenp) * @parma ip IP packet containing the ICMP */ static void receive_icmp(struct ip_udp_hdr *ip, int len, - IPaddr_t src_ip, Ethernet_t *et) + IPaddr_t src_ip, struct ethernet_hdr *et) { ICMP_t *icmph = (ICMP_t *)&ip->udp_src;
@@ -851,7 +851,7 @@ static void receive_icmp(struct ip_udp_hdr *ip, int len, void NetReceive(uchar *inpkt, int len) { - Ethernet_t *et; + struct ethernet_hdr *et; struct ip_udp_hdr *ip; IPaddr_t tmp; IPaddr_t src_ip; @@ -865,7 +865,7 @@ NetReceive(uchar *inpkt, int len)
NetRxPacket = inpkt; NetRxPacketLen = len; - et = (Ethernet_t *)inpkt; + et = (struct ethernet_hdr *)inpkt;
/* too small packet? */ if (len < ETHER_HDR_SIZE) @@ -895,10 +895,11 @@ NetReceive(uchar *inpkt, int len) debug("packet received\n");
if (x < 1514) { + struct e802_hdr *et802 = (struct e802_hdr *)et; /* * Got a 802 packet. Check the other protocol field. */ - x = ntohs(et->et_prot); + x = ntohs(et802->et_prot);
ip = (struct ip_udp_hdr *)(inpkt + E802_HDR_SIZE); len -= E802_HDR_SIZE; @@ -1218,7 +1219,7 @@ NetEthHdrSize(void) int NetSetEther(uchar *xet, uchar * addr, uint prot) { - Ethernet_t *et = (Ethernet_t *)xet; + struct ethernet_hdr *et = (struct ethernet_hdr *)xet; ushort myvlanid;
myvlanid = ntohs(NetOurVLAN); diff --git a/net/ping.c b/net/ping.c index 8542e22..04a594c 100644 --- a/net/ping.c +++ b/net/ping.c @@ -98,7 +98,7 @@ void ping_start(void) ping_send(); }
-void ping_receive(Ethernet_t *et, struct ip_udp_hdr *ip, int len) +void ping_receive(struct ethernet_hdr *et, struct ip_udp_hdr *ip, int len) { ICMP_t *icmph = (ICMP_t *)&(ip->udp_src); IPaddr_t src_ip; diff --git a/net/ping.h b/net/ping.h index 0a2d7d1..fd8d8d9 100644 --- a/net/ping.h +++ b/net/ping.h @@ -28,7 +28,7 @@ void ping_start(void); * @param ip IP header in the same packet * @param len Packet length */ -void ping_receive(Ethernet_t *et, struct ip_udp_hdr *ip, int len); +void ping_receive(struct ethernet_hdr *et, struct ip_udp_hdr *ip, int len);
#endif /* __PING_H__ */ #endif