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.
This commit is contained in:
parent
a79a3b36b5
commit
e296dd2e51
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue