[netcf-devel] [PATCH] Detect and report live interface type.

Laine Stump laine at laine.org
Wed Oct 14 04:03:01 UTC 2009


On 10/13/2009 04:49 PM, David Lutterkort wrote:
> On Tue, 2009-10-13 at 13:27 -0400, Laine Stump wrote:
>    
>> Poke around in sysfs and procfs to determine the type of an interface,
>> and set the "type" attribute in the xml appropriately. If no clue is
>> found, default to "ethernet", which is the current behavior elsewhere
>> in netcf as well.
>>      
> Cool .. some small nits:
>    


It gets better - see below.

The updated patch will be along momentarily.


>    
>> diff --git a/src/drv_initscripts.c b/src/drv_initscripts.c
>> index 8e36fab..ead5b9f 100644
>> --- a/src/drv_initscripts.c
>> +++ b/src/drv_initscripts.c
>> @@ -775,6 +775,9 @@ char *drv_xml_state(struct netcf_if *nif) {
>>       prop = xmlNewProp(root, BAD_CAST "name", BAD_CAST nif->name);
>>       ERR_NOMEM(prop == NULL, ncf);
>>
>> +    prop = xmlSetProp(root, BAD_CAST "type", BAD_CAST if_type(ncf, nif->name));
>> +    ERR_NOMEM(prop == NULL, ncf);
>>      
> This swallows errors in if_type; I'd prefer
>
>          const char *type = if_type(ncf, nif->name);
>          ERR_BAIL(ncf);
>          prop = xmlSetProp(root, BAD_CAST "type", BAD_CAST type);
>          ERR_NOMEM(prop == NULL, ncf);
>    

Good point.

>    
>> diff --git a/src/dutil.c b/src/dutil.c
>> index 817ec6d..9c8e575 100644
>> --- a/src/dutil.c
>> +++ b/src/dutil.c
>> @@ -499,6 +499,39 @@ int if_ipv4_prefix(struct netcf *ncf, const char *intf) {
>>       return prefix;
>>   }
>>
>> +const char *if_type(struct netcf *ncf, const char *intf) {
>> +    char *path;
>> +    struct stat stats;
>> +    const char *ret = NULL;
>> +
>> +    xasprintf(&path, "/proc/net/vlan/%s", intf);
>> +    ERR_NOMEM(path == NULL, ncf);
>> +    if ((stat (path,&stats) == 0)&&  S_ISREG (stats.st_mode)) {
>> +        ret = "vlan";
>> +    }
>> +    FREE(path);
>> +
>> +    if (ret == NULL) {
>> +        xasprintf(&path, "/sys/class/net/%s/bridge", intf);
>> +        ERR_NOMEM(path == NULL, ncf);
>> +        if (stat (path,&stats) == 0&&  S_ISDIR (stats.st_mode))
>> +            return "bridge";
>>      


Oops. that should have been 'ret = "bridge"'.


>> +        FREE(path);
>> +    }
>> +    if (ret == NULL) {
>> +        xasprintf(&path, "/sys/class/net/%s/bonding", intf);
>> +        ERR_NOMEM(path == NULL, ncf);
>> +        if (stat (path,&stats) == 0&&  S_ISDIR (stats.st_mode))
>> +            return "bond";
>>      


Likewise.


>> +        FREE(path);
>> +    }
>> +
>> +error:
>> +    if (ret == NULL)
>> +        ret = "ethernet";
>> +    return ret;
>> +}
>>      
> I'd prefer if the error return was NULL, i.e. the error label should go
> two lines down.
>
> David
>
>
>
>    



More information about the netcf-devel mailing list