Date: Fri, 4 Sep 1998 14:39:46 -0300 (EST) From: Joao Carlos Mendes Luis <jonny@jonny.eng.br> To: luigi@labinfo.iet.unipi.it (Luigi Rizzo) Cc: hackers@FreeBSD.ORG Subject: Re: bcmp abuse in networking code ? Message-ID: <199809041739.OAA20958@roma.coe.ufrj.br> In-Reply-To: <199809021506.RAA10910@labinfo.iet.unipi.it> from Luigi Rizzo at "Sep 2, 98 05:06:30 pm"
index | next in thread | previous in thread | raw e-mail
#define quoting(Luigi Rizzo)
// poking around in /sys/net and /sys/netinet, i frequently see bcmp() being
// used to compare ethernet addresses (but not only those). In some cases,
// even against the ethernet broadcast address.
//
// In my revised bridge code i have the following macros
//
// #define ETH_MATCH(a,b) ( \
// ((unsigned short *)(a))[2] == ((unsigned short *)(b))[2] && \
// *((unsigned int *)(a)) == *((unsigned int *)(b)) )
Indeed very good, but why not adhere to older interfaces ? SunOS and
Solaris have defined this as ether_cmp() for a long time.
Here's a extract from Solaris 2.4's /usr/include/netinet/if_ether.h:
...
/*
* Compare two Ethernet addresses - assumes that the two given
* pointers can be referenced as shorts. On architectures
* where this is not the case, use bcmp instead. Note that like
* bcmp, we return zero if they are the SAME.
*/
#if defined(mc68000)
/*
* On 680x0 machines, we can do a longword compare that is NOT
* longword aligned, as long as it is even aligned.
*/
#define ether_cmp(a, b) (((short *)a)[2] != ((short *)b)[2] || \
*((long *)a) != *((long *)b))
#endif
#if defined(sparc)
#define ether_cmp(a, b) (((short *)b)[2] != ((short *)a)[2] || \
((short *)b)[1] != ((short *)a)[1] || \
((short *)b)[0] != ((short *)a)[0])
#endif
#ifndef ether_cmp
#define ether_cmp(a, b) (bcmp((caddr_t)a, (caddr_t)b, 6))
#endif
...
There are similars for ether_copy() also.
Jonny
--
Joao Carlos Mendes Luis M.Sc. Student
jonny@jonny.eng.br Universidade Federal do Rio de Janeiro
"There are two major products that come out of Berkeley: LSD and Unix.
We don't believe this to be a coincidence." -- Jeremy S. Anderson
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199809041739.OAA20958>
