From e296dd2e517cc79321176833d84ca616132cc5bb Mon Sep 17 00:00:00 2001 From: maxv Date: Tue, 13 Feb 2018 08:43:26 +0000 Subject: [PATCH] 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. --- sys/net/if_arp.h | 45 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 34 insertions(+), 11 deletions(-) diff --git a/sys/net/if_arp.h b/sys/net/if_arp.h index ddcc62250d66..ee7d322b26b6 100644 --- a/sys/net/if_arp.h +++ b/sys/net/if_arp.h @@ -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