On Wed, Jan 04, 2017 at 04:11:03PM -0500, David Miller wrote: > From: Andrew Lunn <and...@lunn.ch> > Date: Wed, 4 Jan 2017 19:56:24 +0100 > > > +static inline u64 ether_addr_to_u64(const u8 *addr) > > +{ > > + u64 u = 0; > > + int i; > > + > > + for (i = 0; i < ETH_ALEN; i++) > > + u = u << 8 | addr[i]; > > + > > + return u; > > +} > ... > > +static inline void u64_to_ether_addr(u64 u, u8 *addr) > > +{ > > + int i; > > + > > + for (i = ETH_ALEN - 1; i >= 0; i--) { > > + addr[i] = u & 0xff; > > + u = u >> 8; > > + } > > +} > > I think these two routines behave differently on big vs little > endian. And I doubt this was your intention.
I don't have a big endian system to test on. I tried to avoid the usual pitfalls. I don't cast a collection of bytes to a u64, which i know has no chance of working. Accessing a MAC address as a byte array should be endian safe. The shift operation should also be endian safe. What exactly do you think will behave differently? Andrew