Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys Move lla_snprintf from if_arp.c to dl_print.c
details: https://anonhg.NetBSD.org/src/rev/6f17487d0aae
branches: trunk
changeset: 998746:6f17487d0aae
user: roy <roy%NetBSD.org@localhost>
date: Mon Apr 29 16:05:46 2019 +0000
description:
Move lla_snprintf from if_arp.c to dl_print.c
diffstat:
sys/net/dl_print.c | 64 ++++++++++++++++++++++++---------------------------
sys/net/if_dl.h | 4 ++-
sys/netinet/if_arp.c | 57 +++++++++++----------------------------------
3 files changed, 47 insertions(+), 78 deletions(-)
diffs (227 lines):
diff -r d0741563aa6e -r 6f17487d0aae sys/net/dl_print.c
--- a/sys/net/dl_print.c Mon Apr 29 12:53:15 2019 +0000
+++ b/sys/net/dl_print.c Mon Apr 29 16:05:46 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: dl_print.c,v 1.3 2016/04/06 18:04:58 christos Exp $ */
+/* $NetBSD: dl_print.c,v 1.4 2019/04/29 16:05:46 roy Exp $ */
/*-
* Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -29,50 +29,46 @@
#include <sys/types.h>
#ifdef _KERNEL
-__KERNEL_RCSID(0, "$NetBSD: dl_print.c,v 1.3 2016/04/06 18:04:58 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dl_print.c,v 1.4 2019/04/29 16:05:46 roy Exp $");
#include <sys/systm.h>
#else
-__RCSID("$NetBSD: dl_print.c,v 1.3 2016/04/06 18:04:58 christos Exp $");
+__RCSID("$NetBSD: dl_print.c,v 1.4 2019/04/29 16:05:46 roy Exp $");
#include <stdio.h>
static const uint8_t hexdigits[] = "0123456789abcdef";
#endif
#include <net/if_dl.h>
+char *
+lla_snprintf(char *dst, size_t dst_len, const void *src, size_t src_len)
+{
+ char *dp;
+ const uint8_t *sp, *ep;
+
+ if (src_len == 0 || dst_len < 3)
+ return NULL;
+
+ dp = dst;
+ sp = (const uint8_t *)src;
+ ep = sp + src_len;
+ while (sp < ep) {
+ if (dst_len < 3)
+ break;
+ dst_len -= 3;
+ *dp++ = hexdigits[(*sp) >> 4];
+ *dp++ = hexdigits[(*sp++) & 0xf];
+ *dp++ = ':';
+ }
+ *--dp = 0;
+
+ return dst;
+}
+
int
dl_print(char *buf, size_t len, const struct dl_addr *dl)
{
- const uint8_t *ap = (const uint8_t *)dl->dl_data;
- char abuf[256 * 3], *cp, *ecp;
-
- ap += dl->dl_nlen;
- cp = abuf;
- ecp = abuf + sizeof(abuf);
-
-#define ADDC(c) do { \
- if (cp >= ecp) {\
- cp++; \
- } else \
- *cp++ = (char)(c); \
- } while (/*CONSTCOND*/0)
+ char abuf[256 * 3];
-#define ADDX(v) do { \
- uint8_t n = hexdigits[(v)]; \
- ADDC(n); \
- } while (/*CONSTCOND*/0)
-
- for (size_t i = 0; i < dl->dl_alen; i++) {
- ADDX((u_int)ap[i] >> 4);
- ADDX(ap[i] & 0xf);
- ADDC(':');
- }
- if (cp > abuf)
- --cp;
- if (ecp > abuf) {
- if (cp < ecp)
- *cp = '\0';
- else
- *--ecp = '\0';
- }
+ lla_snprintf(abuf, sizeof(abuf), dl->dl_data, dl->dl_alen);
return snprintf(buf, len, "%.*s/%hhu#%s",
(int)dl->dl_nlen, dl->dl_data, dl->dl_type, abuf);
}
diff -r d0741563aa6e -r 6f17487d0aae sys/net/if_dl.h
--- a/sys/net/if_dl.h Mon Apr 29 12:53:15 2019 +0000
+++ b/sys/net/if_dl.h Mon Apr 29 16:05:46 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: if_dl.h,v 1.26 2014/12/03 01:31:37 christos Exp $ */
+/* $NetBSD: if_dl.h,v 1.27 2019/04/29 16:05:46 roy Exp $ */
/*
* Copyright (c) 1990, 1993
@@ -119,7 +119,9 @@
#if defined(_KERNEL) || defined(_TEST)
// 255 xx: + 255 'a' + / + # + 3 digits + NUL
#define LINK_ADDRSTRLEN ((255 * 4) + 5)
+#define LLA_ADDRSTRLEN (16 * 3)
+char *lla_snprintf(char *, size_t, const void *, size_t);
int dl_print(char *, size_t, const struct dl_addr *);
#define DL_PRINT(b, a) (dl_print((b), sizeof(b), (a)), (b))
int sdl_print(char *, size_t, const void *);
diff -r d0741563aa6e -r 6f17487d0aae sys/netinet/if_arp.c
--- a/sys/netinet/if_arp.c Mon Apr 29 12:53:15 2019 +0000
+++ b/sys/netinet/if_arp.c Mon Apr 29 16:05:46 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: if_arp.c,v 1.280 2019/04/29 11:57:22 roy Exp $ */
+/* $NetBSD: if_arp.c,v 1.281 2019/04/29 16:05:46 roy Exp $ */
/*
* Copyright (c) 1998, 2000, 2008 The NetBSD Foundation, Inc.
@@ -68,7 +68,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_arp.c,v 1.280 2019/04/29 11:57:22 roy Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_arp.c,v 1.281 2019/04/29 16:05:46 roy Exp $");
#ifdef _KERNEL_OPT
#include "opt_ddb.h"
@@ -214,36 +214,6 @@
static int log_wrong_iface = 1;
static int log_unknown_network = 1;
-/*
- * this should be elsewhere.
- */
-
-#define LLA_ADDRSTRLEN (16 * 3)
-
-static char *
-lla_snprintf(char *, const u_int8_t *, int);
-
-static char *
-lla_snprintf(char *dst, const u_int8_t *adrp, int len)
-{
- int i;
- char *p;
-
- p = dst;
-
- *p++ = hexdigits[(*adrp) >> 4];
- *p++ = hexdigits[(*adrp++) & 0xf];
-
- for (i = 1; i < len && i < 16; i++) {
- *p++ = ':';
- *p++ = hexdigits[(*adrp) >> 4];
- *p++ = hexdigits[(*adrp++) & 0xf];
- }
-
- *p = 0;
- return dst;
-}
-
DOMAIN_DEFINE(arpdomain); /* forward declare and add to link set */
static void
@@ -1035,7 +1005,7 @@
uint64_t *arps;
struct psref psref, psref_ia;
int s;
- char llabuf[LLA_ADDRSTRLEN];
+ char llabuf[LLA_ADDRSTRLEN], *llastr;
char ipbuf[INET_ADDRSTRLEN];
bool do_dad;
@@ -1179,8 +1149,9 @@
(in_nullhost(isaddr) && in_hosteq(itaddr, myaddr) &&
m->m_flags & M_BCAST)))
{
- arp_dad_duplicated((struct ifaddr *)ia,
- lla_snprintf(llabuf, ar_sha(ah), ah->ar_hln));
+ llastr = lla_snprintf(llabuf, sizeof(llabuf),
+ ar_sha(ah), ah->ar_hln);
+ arp_dad_duplicated((struct ifaddr *)ia, llastr);
goto out;
}
@@ -1203,16 +1174,18 @@
goto reply;
if ((la->la_flags & LLE_VALID) &&
- memcmp(ar_sha(ah), &la->ll_addr, ifp->if_addrlen)) {
+ memcmp(ar_sha(ah), &la->ll_addr, ifp->if_addrlen))
+ {
+ llastr = lla_snprintf(llabuf, sizeof(llabuf),
+ ar_sha(ah), ah->ar_hln);
+
if (la->la_flags & LLE_STATIC) {
ARP_STATINC(ARP_STAT_RCVOVERPERM);
if (!log_permanent_modify)
goto out;
log(LOG_INFO,
"%s tried to overwrite permanent arp info"
- " for %s\n",
- lla_snprintf(llabuf, ar_sha(ah), ah->ar_hln),
- IN_PRINT(ipbuf, &isaddr));
+ " for %s\n", llastr, IN_PRINT(ipbuf, &isaddr));
goto out;
} else if (la->lle_tbl->llt_ifp != ifp) {
/* XXX should not happen? */
@@ -1222,7 +1195,7 @@
log(LOG_INFO,
"%s on %s tried to overwrite "
"arp info for %s on %s\n",
- lla_snprintf(llabuf, ar_sha(ah), ah->ar_hln),
+ llastr,
ifp->if_xname, IN_PRINT(ipbuf, &isaddr),
la->lle_tbl->llt_ifp->if_xname);
goto out;
@@ -1231,9 +1204,7 @@
if (log_movements)
log(LOG_INFO, "arp info overwritten "
"for %s by %s\n",
- IN_PRINT(ipbuf, &isaddr),
- lla_snprintf(llabuf, ar_sha(ah),
- ah->ar_hln));
+ IN_PRINT(ipbuf, &isaddr), llastr);
}
}
Home |
Main Index |
Thread Index |
Old Index