Hi Joe, On Tue, Mar 27, 2012 at 4:42 PM, Joe Hershberger <joe.hershber...@ni.com> wrote:
This needs a commit message. > Signed-off-by: Joe Hershberger <joe.hershber...@ni.com> > Cc: Joe Hershberger <joe.hershber...@gmail.com> > Cc: Simon Glass <s...@chromium.org> > Cc: Mike Frysinger <vap...@gentoo.org> > --- > Changes for v2: > - Moved is_cdp_packet to a separate patch > - Fixed blank newline at the end of cdp.h > - Pushed #ifdef CONFIG_CMD_CDP into header > > include/net.h | 8 +- > net/Makefile | 1 + > net/cdp.c | 374 > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > net/cdp.h | 20 +++ > net/net.c | 366 +------------------------------------------------------- > 5 files changed, 399 insertions(+), 370 deletions(-) > create mode 100644 net/cdp.c > create mode 100644 net/cdp.h > > diff --git a/include/net.h b/include/net.h > index e39d88b..54f05bb 100644 > --- a/include/net.h > +++ b/include/net.h > @@ -355,9 +355,7 @@ extern uchar NetEtherNullAddr[6]; > extern ushort NetOurVLAN; /* Our VLAN */ > extern ushort NetOurNativeVLAN; /* Our Native VLAN */ > > -extern uchar NetCDPAddr[6]; /* Ethernet CDP address */ > -extern ushort CDPNativeVLAN; /* CDP returned native VLAN */ > -extern ushort CDPApplianceVLAN; /* CDP returned appliance VLAN */ > +extern const uchar NetCDPAddr[6]; /* Ethernet CDP address */ > > extern int NetState; /* Network loop state */ > #define NETLOOP_CONTINUE 1 > @@ -386,8 +384,8 @@ extern IPaddr_t NetPingIP; /* > the ip address to ping */ > > #if defined(CONFIG_CMD_CDP) > /* when CDP completes these hold the return values */ > -extern ushort CDPNativeVLAN; > -extern ushort CDPApplianceVLAN; > +extern ushort CDPNativeVLAN; /* CDP returned native VLAN */ > +extern ushort CDPApplianceVLAN; /* CDP returned appliance > VLAN */ > #endif > > #if defined(CONFIG_CMD_SNTP) > diff --git a/net/Makefile b/net/Makefile > index 5901046..b350bfc 100644 > --- a/net/Makefile > +++ b/net/Makefile > @@ -28,6 +28,7 @@ include $(TOPDIR)/config.mk > LIB = $(obj)libnet.o > > COBJS-$(CONFIG_CMD_NET) += bootp.o > +COBJS-$(CONFIG_CMD_CDP) += cdp.o > COBJS-$(CONFIG_CMD_DNS) += dns.o > COBJS-$(CONFIG_CMD_NET) += eth.o > COBJS-$(CONFIG_CMD_NET) += net.o > diff --git a/net/cdp.c b/net/cdp.c > new file mode 100644 > index 0000000..028be82 > --- /dev/null > +++ b/net/cdp.c > @@ -0,0 +1,374 @@ > +/* > + * Copied from Linux Monitor (LiMon) - Networking. > + * > + * Copyright 1994 - 2000 Neil Russell. > + * (See License) > + * Copyright 2000 Roland Borde > + * Copyright 2000 Paolo Scaffardi > + * Copyright 2000-2002 Wolfgang Denk, w...@denx.de > + */ > + > +#include <common.h> > +#include <net.h> > +#if defined(CONFIG_CDP_VERSION) > +#include <timestamp.h> > +#endif > + > +#include "cdp.h" > + > +/* Ethernet bcast address */ > +const uchar NetCDPAddr[6] = { 0x01, 0x00, 0x0c, 0xcc, 0xcc, 0xcc }; > + > +#define CDP_DEVICE_ID_TLV 0x0001 > +#define CDP_ADDRESS_TLV 0x0002 > +#define CDP_PORT_ID_TLV 0x0003 > +#define CDP_CAPABILITIES_TLV 0x0004 > +#define CDP_VERSION_TLV 0x0005 > +#define CDP_PLATFORM_TLV 0x0006 > +#define CDP_NATIVE_VLAN_TLV 0x000a > +#define CDP_APPLIANCE_VLAN_TLV 0x000e > +#define CDP_TRIGGER_TLV 0x000f > +#define CDP_POWER_CONSUMPTION_TLV 0x0010 > +#define CDP_SYSNAME_TLV 0x0014 > +#define CDP_SYSOBJECT_TLV 0x0015 > +#define CDP_MANAGEMENT_ADDRESS_TLV 0x0016 > + > +#define CDP_TIMEOUT 250UL /* one packet every 250ms */ > + > +static int CDPSeq; > +static int CDPOK; > + > +ushort CDPNativeVLAN; > +ushort CDPApplianceVLAN; > + > +static const uchar CDP_SNAP_hdr[8] = { 0xAA, 0xAA, 0x03, 0x00, 0x00, 0x0C, > 0x20, > + 0x00 }; Can we put the values on the next line? > + > +static ushort > +CDP_compute_csum(const uchar *buff, ushort len) Would be nice to add a function comment if you know what it does, and returns > +{ > + ushort csum; > + int odd; > + ulong result = 0; > + ushort leftover; > + ushort *p; > + > + if (len > 0) { > + odd = 1 & (ulong)buff; > + if (odd) { > + result = *buff << 8; > + len--; > + buff++; > + } > + while (len > 1) { > + p = (ushort *)buff; > + result += *p++; > + buff = (uchar *)p; > + if (result & 0x80000000) > + result = (result & 0xFFFF) + (result >> 16); > + len -= 2; > + } > + if (len) { > + leftover = (signed short)(*(const signed char *)buff); > + /* CISCO SUCKS big time! (and blows too): Comment style. But it is existing code, so perhaps you can leave it along? Poor Cisco. > + * CDP uses the IP checksum algorithm with a twist; > + * for the last byte it *sign* extends and sums. > + */ > + result = (result & 0xffff0000) | > + ((result + leftover) & 0x0000ffff); > + } > + while (result >> 16) > + result = (result & 0xFFFF) + (result >> 16); > + > + if (odd) > + result = ((result >> 8) & 0xff) | > + ((result & 0xff) << 8); > + } > + Regards, Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot