From: Jens Osterkamp <jens@linux.vnet.ibm.com>
To: John Fastabend <john.r.fastabend@intel.com>
Cc: "chrisw@redhat.com" <chrisw@redhat.com>,
"evb@yahoogroups.com" <evb@yahoogroups.com>,
"e1000-eedc@lists.sourceforge.net"
<e1000-eedc@lists.sourceforge.net>,
"virtualization@lists.linux-foundation.org"
<virtualization@lists.linux-foundation.org>
Subject: Re: [E1000-eedc] [PATCH 11/17] ECP implementation
Date: Tue, 3 Aug 2010 14:02:44 +0200 [thread overview]
Message-ID: <201008031402.44207.jens@linux.vnet.ibm.com> (raw)
In-Reply-To: <4C57B8EC.4000604@intel.com>
On Tuesday 03 August 2010, John Fastabend wrote:
> Jens Osterkamp wrote:
> > This is the implementation of the edge control protocol (ECP) as specified
> > in IEEE 802.1Qbg.
> >
> > For this it extends the infrastructure defined lldpad to send and receive
> > ECP frames with a new (yet to be defined) ethertype.
> > Received frames are validated and analyzed before the content is handed to the
> > upper layer protocol (ULP, VDP in this case) for further processing. Frames
> > to be transmitted are compiled from VSI (guest interface) profiles registered
> > on a interface.
> > Reception and transmission of ECP frames is controlled by RX and TX state
> > machines, timeouts are handled timeout functions.
> > The patch still contains a lot of debug code to allow low-level protocol
> > analysis.
> >
> > Signed-off-by: Jens Osterkamp <jens@linux.vnet.ibm.com>
> > ---
> > Makefile.am | 2 +
> > ecp/ecp.c | 77 +++++++
> > ecp/ecp.h | 92 ++++++++
> > ecp/ecp_rx.c | 597 ++++++++++++++++++++++++++++++++++++++++++++++++++++
> > ecp/ecp_tx.c | 467 ++++++++++++++++++++++++++++++++++++++++
> > include/lldp_evb.h | 6 +
> > include/lldp_vdp.h | 157 ++++++++++++++
> > lldp/l2_packet.h | 2 +
> > lldp/ports.h | 25 ++-
> > lldp_evb.c | 2 +
> > 10 files changed, 1424 insertions(+), 3 deletions(-)
> > create mode 100644 ecp/ecp.c
> > create mode 100644 ecp/ecp.h
> > create mode 100644 ecp/ecp_rx.c
> > create mode 100644 ecp/ecp_tx.c
> > create mode 100644 include/lldp_vdp.h
> >
>
> snip
>
> > +
> > +struct vdp_user_data {
> > + LIST_HEAD(vdp_head, vdp_data) head;
> > +};
> > +
> > +struct lldp_module *vdp_register(void);
> > +void vdp_unregister(struct lldp_module *mod);
> > +struct vdp_data *vdp_data(char *ifname);
> > +struct packed_tlv *vdp_gettlv(struct port *port, struct vsi_profile *profile);
> > +void vdp_vsi_sm_station(struct vsi_profile *profile);
> > +struct vsi_profile *vdp_add_profile(struct vsi_profile *profile);
> > +
> > +#define MAC_ADDR_STRLEN 18
> > +#define INSTANCE_STRLEN 32
> > +
> > +#define PRINT_PROFILE(s, p) \
> > +{ int c; \
> > + c = sprintf(s, "\nmode: %i\n", p->mode); s += c; \
> > + c = sprintf(s, "response: %i\n", p->response); s += c; \
> > + c = sprintf(s, "state: %i\n", p->state); s += c; \
> > + c = sprintf(s, "mgrid: %i\n", p->mgrid); s += c; \
> > + c = sprintf(s, "id: %x%x%x\n", p->id[2], p->id[1], p->id[0]); \
> > + s += c; \
> > + c = sprintf(s, "version: %i\n", p->version); s += c; \
> > + char instance[INSTANCE_STRLEN+2]; \
> > + instance2str(p->instance, instance, sizeof(instance)); \
> > + c = sprintf(s, "instance: %s\n", &instance); s += c; \
> > + char macbuf[MAC_ADDR_STRLEN+1]; \
> > + mac2str(p->mac, macbuf, MAC_ADDR_STRLEN); \
> > + c = sprintf(s, "mac: %s\n", macbuf); s += c; \
> > + c = sprintf(s, "vlan: %i\n\n", p->vlan); s += c; \
> > +}
> > +
> > +#endif /* _LLDP_VDP_H */
> > diff --git a/lldp/l2_packet.h b/lldp/l2_packet.h
> > index 16f3683..0962429 100644
> > --- a/lldp/l2_packet.h
> > +++ b/lldp/l2_packet.h
> > @@ -36,6 +36,8 @@
> >
> > #define ETH_P_LLDP 0x88cc
> >
> > +/* TODO: use extended ethertype until final ethertype is available */
> > +#define ETH_P_ECP 0x88b7
> >
> > #define ETH_FRAME_LEN 1514
> >
> > diff --git a/lldp/ports.h b/lldp/ports.h
> > index 0138efe..c2e18ec 100644
> > --- a/lldp/ports.h
> > +++ b/lldp/ports.h
> > @@ -136,21 +136,40 @@ struct porttlvs{
> > struct unpacked_tlv *last_peer;
> > };
> >
> > +struct ecp {
> > + struct l2_packet_data *l2;
> > + int sequence;
> > + int retries;
> > + int ackReceived;
> > + int ackTimerExpired;
> > + u16 lastSequence;
> > + u16 seqECPDU;
> > + struct portrx rx;
> > + struct porttx tx;
> > + struct portstats stats;
> > +};
> > +
>
>
> This structure is ecp specific and should be part of the ecp module. Not in
> ports.h.
Right, I will move it.
>
> > struct port {
> > char *ifname;
> > u8 hw_resetting;
> > u8 portEnabled;
> > u8 prevPortEnabled;
> > u8 adminStatus;
> > - u8 rxChanges;
> > - u16 lldpdu;
> > +
> > + /* protocol specific */
> > struct l2_packet_data *l2;
> > struct portrx rx;
> > struct porttx tx;
> > - struct porttlvs tlvs;
> > struct portstats stats;
> > struct porttimers timers;
> > + u8 rxChanges;
> > + u16 lldpdu;
> > struct msap msap;
> > +
> > + /* not sure */
> > + struct porttlvs tlvs;
> > +
> > + struct ecp ecp;
> > struct port *next;
> > };
> >
>
> This adds ecp knowledge into the generic port structure I want to keep the port
> structure module agnostic. dcbx addresses the same issue by using the module
> data space. evb should use a similar scheme and create this structure at
> ifup(). Any reason why this can't work?
I will look into it and check if I can move it as well.
>
> > diff --git a/lldp_evb.c b/lldp_evb.c
> > index bce01b6..b1b7edc 100644
> > --- a/lldp_evb.c
> > +++ b/lldp_evb.c
> > @@ -354,6 +354,8 @@ static void evb_statemachine(struct evb_data *ed, struct tlv_info_evb *tie)
> > * different parameters ? Check parameters. switch state back to
> > * EVB_CONFIGURE ? */
> > printf("%s: state -> EVB_CONFIRMATION\n", __func__);
> > + if (ed->tie->scap & LLDP_EVB_CAPABILITY_PROTOCOL_ECP)
> > + ecp_init(ed->ifname);
> > break;
> > default:
> > fprintf(stderr, "EVB statemachine reached invalid state !\n");
> > --
> > 1.7.1
> >
> >
> > ------------------------------------------------------------------------------
> > The Palm PDK Hot Apps Program offers developers who use the
> > Plug-In Development Kit to bring their C/C++ apps to Palm for a share
> > of $1 Million in cash or HP Products. Visit us here for more details:
> > http://ad.doubleclick.net/clk;226879339;13503038;l?
> > http://clk.atdmt.com/CRS/go/247765532/direct/01/
> > _______________________________________________
> > E1000-eedc mailing list
> > E1000-eedc@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/e1000-eedc
>
>
--
Best regards,
Jens Osterkamp
--------------------------------------------------------------------------------
IBM Deutschland Research & Development GmbH
Vorsitzender des Aufsichtsrats: Martin Jetter
Geschäftsführung: Dirk Wittkopp
Sitz der Gesellschaft: Böblingen
Registergericht: Amtsgericht Stuttgart, HRB 243294
next prev parent reply other threads:[~2010-08-03 12:02 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-23 10:34 implementation of IEEE 802.1Qbg in lldpad Jens Osterkamp
2010-07-23 10:34 ` [PATCH 01/17] consolidation of MIN and MAX macros in common.h Jens Osterkamp
2010-07-23 10:34 ` [PATCH 02/17] implementation of IEEE 802.1Qbg in lldpad, part 1 Jens Osterkamp
2010-07-23 10:34 ` [PATCH 03/17] support for getting and setting EVB TLV parameters Jens Osterkamp
2010-07-23 10:34 ` [PATCH 04/17] BUGFIX: check in correct positions Jens Osterkamp
2010-07-23 10:34 ` [PATCH 05/17] remove VDPL and proper config save and restore Jens Osterkamp
2010-07-23 10:34 ` [PATCH 06/17] BUGFIX: agree to max of rte Jens Osterkamp
2010-07-23 10:34 ` [PATCH 07/17] BUGFIX: avoid compile warnings Jens Osterkamp
2010-07-23 10:34 ` [PATCH 08/17] BUGFIX: fix formatting in include/lldp_evb_clif.h Jens Osterkamp
2010-07-23 10:34 ` [PATCH 09/17] BUGFIX: check for existence of ifup Jens Osterkamp
2010-07-23 10:34 ` [PATCH 10/17] allow to set both supported forwarding modes Jens Osterkamp
2010-07-23 10:34 ` [PATCH 11/17] ECP implementation Jens Osterkamp
2010-08-03 6:36 ` [E1000-eedc] " John Fastabend
2010-08-03 12:02 ` Jens Osterkamp [this message]
2010-07-23 10:34 ` [PATCH 12/17] implementation of vdp Jens Osterkamp
2010-07-23 10:34 ` [PATCH 13/17] VDP commandline interface Jens Osterkamp
2010-07-23 10:34 ` [PATCH 14/17] add libnl dependency to configure.ac Jens Osterkamp
2010-07-23 10:34 ` [PATCH 15/17] use connect instead of bind Jens Osterkamp
2010-07-23 10:34 ` [PATCH 16/17] lldpad support for libvirt netlink message Jens Osterkamp
2010-08-03 7:52 ` [E1000-eedc] " John Fastabend
2010-08-03 11:59 ` Jens Osterkamp
2010-07-23 10:34 ` [PATCH 17/17] do not use macv[tap/lan] interfaces as ports Jens Osterkamp
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=201008031402.44207.jens@linux.vnet.ibm.com \
--to=jens@linux.vnet.ibm.com \
--cc=chrisw@redhat.com \
--cc=e1000-eedc@lists.sourceforge.net \
--cc=evb@yahoogroups.com \
--cc=john.r.fastabend@intel.com \
--cc=virtualization@lists.linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.