[ovs-dev] [PATCH 1/2] vswitch: Factor out detection of internal interfaces into a new function.
Ben Pfaff
blp at nicira.com
Fri Oct 2 19:32:41 UTC 2009
Is that for both patches or just 1/2?
Justin Pettit <jpettit at nicira.com> writes:
> Looks good.
>
> --Justin
>
>
> On Oct 2, 2009, at 10:59 AM, Ben Pfaff wrote:
>
>> The following commit needs to use this same logic, so break it out
>> into
>> a function to avoid redundancy.
>> ---
>> vswitchd/bridge.c | 41 ++++++++++++++++++++++++++++++-----------
>> 1 files changed, 30 insertions(+), 11 deletions(-)
>>
>> diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c
>> index b525f3d..2d788ae 100644
>> --- a/vswitchd/bridge.c
>> +++ b/vswitchd/bridge.c
>> @@ -242,6 +242,7 @@ static void iface_destroy(struct iface *);
>> static struct iface *iface_lookup(const struct bridge *, const char
>> *name);
>> static struct iface *iface_from_dp_ifidx(const struct bridge *,
>> uint16_t dp_ifidx);
>> +static bool iface_is_internal(const struct bridge *, const char
>> *name);
>>
>> /* Hooks into ofproto processing. */
>> static struct ofhooks bridge_ofhooks;
>> @@ -464,18 +465,8 @@ bridge_reconfigure(void)
>> bool internal;
>> int error;
>>
>> - /* It's an internal interface if it's marked that
>> way, or if
>> - * it's a bonded interface for which we're faking
>> up a network
>> - * device. */
>> - internal = cfg_get_bool(0, "iface.%s.internal",
>> if_name);
>> - if (cfg_get_bool(0, "bonding.%s.fake-iface",
>> if_name)) {
>> - struct port *port = port_lookup(br, if_name);
>> - if (port && port->n_ifaces > 1) {
>> - internal = true;
>> - }
>> - }
>> -
>> /* Add to datapath. */
>> + internal = iface_is_internal(br, if_name);
>> error = dpif_port_add(&br->dpif, if_name,
>> next_port_no++,
>> internal ? ODP_PORT_INTERNAL :
>> 0);
>> if (error != EEXIST) {
>> @@ -3116,6 +3107,34 @@ iface_from_dp_ifidx(const struct bridge *br,
>> uint16_t dp_ifidx)
>> {
>> return port_array_get(&br->ifaces, dp_ifidx);
>> }
>> +
>> +/* Returns true if 'iface' is the name of an "internal" interface
>> on bridge
>> + * 'br', that is, an interface that is entirely simulated within
>> the datapath.
>> + * The local port (ODPP_LOCAL) is always an internal interface.
>> Other local
>> + * interfaces are created by setting "iface.<iface>.internal = true".
>> + *
>> + * In addition, we have a kluge-y feature that creates an internal
>> port with
>> + * the name of a bonded port if "bonding.<bondname>.fake-iface =
>> true" is set.
>> + * This feature needs to go away in the long term. Until then,
>> this is one
>> + * reason why this function takes a name instead of a struct iface:
>> the fake
>> + * interfaces created this way do not have a struct iface. */
>> +static bool
>> +iface_is_internal(const struct bridge *br, const char *iface)
>> +{
>> + if (!strcmp(iface, br->name)
>> + || cfg_get_bool(0, "iface.%s.internal", iface)) {
>> + return true;
>> + }
>> +
>> + if (cfg_get_bool(0, "bonding.%s.fake-iface", iface)) {
>> + struct port *port = port_lookup(br, iface);
>> + if (port && port->n_ifaces > 1) {
>> + return true;
>> + }
>> + }
>> +
>> + return false;
>> +}
>>
>> /* Port mirroring. */
>>
>> --
>> 1.6.3.3
>>
>>
>> _______________________________________________
>> dev mailing list
>> dev at openvswitch.org
>> http://openvswitch.org/mailman/listinfo/dev_openvswitch.org
More information about the dev
mailing list