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