Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/net Define ar_* as inlined functions, not as macros. Mak...



details:   https://anonhg.NetBSD.org/src/rev/e22bf75dad58
branches:  trunk
changeset: 829804:e22bf75dad58
user:      maxv <maxv%NetBSD.org@localhost>
date:      Tue Feb 13 08:43:26 2018 +0000

description:
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.

diffstat:

 sys/net/if_arp.h |  45 ++++++++++++++++++++++++++++++++++-----------
 1 files changed, 34 insertions(+), 11 deletions(-)

diffs (63 lines):

diff -r 8225789b781e -r e22bf75dad58 sys/net/if_arp.h
--- a/sys/net/if_arp.h  Tue Feb 13 08:20:12 2018 +0000
+++ b/sys/net/if_arp.h  Tue Feb 13 08:43:26 2018 +0000
@@ -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 @@
 #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



Home | Main Index | Thread Index | Old Index