Yeah, oops.  I added that here.

On Mon, Mar 21, 2011 at 04:00:19PM -0700, Ethan Jackson wrote:
> At any rate, the patch looks fine to me, I think you just need to add
> a void *p to the union in mac_entry.
> 
> Ethan
> 
> On Mon, Mar 21, 2011 at 3:57 PM, Ethan Jackson <[email protected]> wrote:
> > This patch doesn't build for me.
> >
> > vswitchd/bridge.c:2787:43: error: 'union <anonymous>' has no member named 
> > 'p'
> >
> > On Mon, Mar 21, 2011 at 10:59 AM, Ben Pfaff <[email protected]> wrote:
> >> This takes a step toward changing the data structure used for keeping
> >> track of ports from an array to a more appropriate data structure.
> >> ---
> >> ?vswitchd/bridge.c | ? 20 +++++++++-----------
> >> ?1 files changed, 9 insertions(+), 11 deletions(-)
> >>
> >> diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c
> >> index 28fcd36..e18e2ce 100644
> >> --- a/vswitchd/bridge.c
> >> +++ b/vswitchd/bridge.c
> >> @@ -1517,11 +1517,9 @@ bridge_unixctl_fdb_show(struct unixctl_conn *conn,
> >>
> >> ? ? ds_put_cstr(&ds, " port ?VLAN ?MAC ? ? ? ? ? ? ? ?Age\n");
> >> ? ? LIST_FOR_EACH (e, lru_node, &br->ml->lrus) {
> >> - ? ? ? ?if (e->port.i < 0 || e->port.i >= br->n_ports) {
> >> - ? ? ? ? ? ?continue;
> >> - ? ? ? ?}
> >> + ? ? ? ?struct port *port = e->port.p;
> >> ? ? ? ? ds_put_format(&ds, "%5d ?%4d ?"ETH_ADDR_FMT" ?%3d\n",
> >> - ? ? ? ? ? ? ? ? ? ? ?port_get_an_iface(br->ports[e->port.i])->dp_ifidx,
> >> + ? ? ? ? ? ? ? ? ? ? ?port_get_an_iface(br->ports[port])->dp_ifidx,
> >> ? ? ? ? ? ? ? ? ? ? ? e->vlan, ETH_ADDR_ARGS(e->mac), mac_entry_age(e));
> >> ? ? }
> >> ? ? unixctl_command_reply(conn, 200, ds_cstr(&ds));
> >> @@ -2786,7 +2784,7 @@ update_learning_table(struct bridge *br, const 
> >> struct flow *flow, int vlan,
> >> ? ? }
> >>
> >> ? ? mac_learning_touch(br->ml, mac);
> >> - ? ?if (mac_entry_is_new(mac) || mac->port.i != in_port->port_idx) {
> >> + ? ?if (mac_entry_is_new(mac) || mac->port.p != in_port) {
> >> ? ? ? ? /* The log messages here could actually be useful in debugging,
> >> ? ? ? ? ?* so keep the rate limit relatively high. */
> >> ? ? ? ? static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(30, 300);
> >> @@ -2795,7 +2793,7 @@ update_learning_table(struct bridge *br, const 
> >> struct flow *flow, int vlan,
> >> ? ? ? ? ? ? ? ? ? ? br->name, ETH_ADDR_ARGS(flow->dl_src),
> >> ? ? ? ? ? ? ? ? ? ? in_port->name, vlan);
> >>
> >> - ? ? ? ?mac->port.i = in_port->port_idx;
> >> + ? ? ? ?mac->port.p = in_port;
> >> ? ? ? ? ofproto_revalidate(br->ofproto, mac_learning_change(br->ml, mac));
> >> ? ? }
> >> ?}
> >> @@ -2901,7 +2899,7 @@ is_admissible(struct bridge *br, const struct flow 
> >> *flow, bool have_packet,
> >> ? ? ? ? ?* reflections on bond slaves. ?If this is the case, just drop the
> >> ? ? ? ? ?* packet now. */
> >> ? ? ? ? mac = mac_learning_lookup(br->ml, flow->dl_src, vlan, NULL);
> >> - ? ? ? ?if (mac && mac->port.i != in_port->port_idx &&
> >> + ? ? ? ?if (mac && mac->port.p != in_port &&
> >> ? ? ? ? ? ? (!is_gratuitous_arp(flow) || 
> >> mac_entry_is_grat_arp_locked(mac))) {
> >> ? ? ? ? ? ? ? ? return false;
> >> ? ? ? ? }
> >> @@ -2936,8 +2934,8 @@ process_flow(struct bridge *br, const struct flow 
> >> *flow,
> >>
> >> ? ? /* Determine output port. */
> >> ? ? mac = mac_learning_lookup(br->ml, flow->dl_dst, vlan, tags);
> >> - ? ?if (mac && mac->port.i >= 0 && mac->port.i < br->n_ports) {
> >> - ? ? ? ?out_port = br->ports[mac->port.i];
> >> + ? ?if (mac) {
> >> + ? ? ? ?mac = mac->port.p;
> >> ? ? } else if (!packet && !eth_addr_is_multicast(flow->dl_dst)) {
> >> ? ? ? ? /* If we are revalidating but don't have a learning entry then
> >> ? ? ? ? ?* eject the flow. ?Installing a flow that floods packets opens
> >> @@ -3424,7 +3422,7 @@ bond_send_learning_packets(struct port *port)
> >> ? ? ? ? struct flow flow;
> >> ? ? ? ? int retval;
> >>
> >> - ? ? ? ?if (e->port.i == port->port_idx) {
> >> + ? ? ? ?if (e->port.p == port) {
> >> ? ? ? ? ? ? continue;
> >> ? ? ? ? }
> >>
> >> @@ -3600,7 +3598,7 @@ bond_unixctl_show(struct unixctl_conn *conn,
> >>
> >> ? ? ? ? ? ? ? ? memcpy(flow.dl_src, me->mac, ETH_ADDR_LEN);
> >> ? ? ? ? ? ? ? ? if (bond_hash_src(me->mac, me->vlan) == hash
> >> - ? ? ? ? ? ? ? ? ? ?&& me->port.i != port->port_idx
> >> + ? ? ? ? ? ? ? ? ? ?&& me->port.p != port
> >> ? ? ? ? ? ? ? ? ? ? && choose_output_iface(port, &flow, me->vlan,
> >> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?&dp_ifidx, &tags)
> >> ? ? ? ? ? ? ? ? ? ? && dp_ifidx == iface->dp_ifidx)
> >> --
> >> 1.7.1
> >>
> >> _______________________________________________
> >> dev mailing list
> >> [email protected]
> >> http://openvswitch.org/mailman/listinfo/dev
> >>
> >
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev

Reply via email to