Module Name: src Committed By: maxv Date: Tue Feb 13 08:43:26 UTC 2018
Modified Files: src/sys/net: if_arp.h Log Message: Define ar_* as inlined functions, not as macros. Makes it easier to understand why ARPHRD_IEEE1394 needs to be handled with care - it doesn't have ar_tha. To generate a diff of this commit: cvs rdiff -u -r1.30 -r1.31 src/sys/net/if_arp.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/net/if_arp.h diff -u src/sys/net/if_arp.h:1.30 src/sys/net/if_arp.h:1.31 --- src/sys/net/if_arp.h:1.30 Mon Aug 31 08:05:20 2015 +++ src/sys/net/if_arp.h Tue Feb 13 08:43:26 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: if_arp.h,v 1.30 2015/08/31 08:05:20 ozaki-r Exp $ */ +/* $NetBSD: if_arp.h,v 1.31 2018/02/13 08:43:26 maxv Exp $ */ /* * Copyright (c) 1986, 1993 @@ -68,20 +68,43 @@ struct arphdr { #ifdef COMMENT_ONLY uint8_t ar_sha[]; /* sender hardware address */ uint8_t ar_spa[]; /* sender protocol address */ - uint8_t ar_tha[]; /* target hardware address */ + uint8_t ar_tha[]; /* target hardware address (!IEEE1394) */ uint8_t ar_tpa[]; /* target protocol address */ #endif -#define ar_sha(ap) (((char *)((ap)+1))+0) -#define ar_spa(ap) (((char *)((ap)+1))+(ap)->ar_hln) -#define ar_tha(ap) \ - (ntohs((ap)->ar_hrd) == ARPHRD_IEEE1394 \ - ? NULL : (((char *)((ap)+1))+(ap)->ar_hln+(ap)->ar_pln)) -#define ar_tpa(ap) \ - (ntohs((ap)->ar_hrd) == ARPHRD_IEEE1394 \ - ? (((char *)((ap)+1))+(ap)->ar_hln+(ap)->ar_pln) \ - : (((char *)((ap)+1))+(ap)->ar_hln+(ap)->ar_pln+(ap)->ar_hln)) } __packed; +static inline uint8_t * +ar_sha(struct arphdr *ap) +{ + return ((uint8_t *)(ap + 1)) + 0; +} + +static inline uint8_t * +ar_spa(struct arphdr *ap) +{ + return ((uint8_t *)(ap + 1)) + ap->ar_hln; +} + +static inline uint8_t * +ar_tha(struct arphdr *ap) +{ + if (ntohs(ap->ar_hrd) == ARPHRD_IEEE1394) { + return NULL; + } else { + return ((uint8_t *)(ap + 1)) + ap->ar_hln + ap->ar_pln; + } +} + +static inline uint8_t * +ar_tpa(struct arphdr *ap) +{ + if (ntohs(ap->ar_hrd) == ARPHRD_IEEE1394) { + return ((uint8_t *)(ap + 1)) + ap->ar_hln + ap->ar_pln; + } else { + return ((uint8_t *)(ap + 1)) + ap->ar_hln + ap->ar_pln + + ap->ar_hln; + } +} /* * ARP ioctl request