[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