return "unknown";
}
+static void
+free_attr_val(const struct switch_attr *attr, const struct switch_val *val)
+{
+ switch (attr->type) {
+ case SWITCH_TYPE_STRING:
+ free(val->value.s);
+ break;
+ case SWITCH_TYPE_PORTS:
+ free(val->value.ports);
+ break;
+ case SWITCH_TYPE_LINK:
+ free(val->value.link);
+ break;
+ default:
+ break;
+ }
+}
+
static void
print_attr_val(const struct switch_attr *attr, const struct switch_val *val)
{
printf("\t%s: ", attr->name);
if (swlib_get_attr(dev, attr, val) < 0)
printf("???");
- else
+ else {
print_attr_val(attr, val);
+ free_attr_val(attr, val);
+ }
putchar('\n');
}
attr = attr->next;
if(cvlan > -1)
cport = cvlan;
- if(swlib_set_attr_string(dev, a, cport, cvalue) < 0)
+ retval = swlib_set_attr_string(dev, a, cport, cvalue);
+ if (retval < 0)
{
- fprintf(stderr, "failed\n");
- retval = -1;
+ nl_perror(-retval, "Failed to set attribute");
goto out;
}
break;
val.port_vlan = cvlan;
if(cport > -1)
val.port_vlan = cport;
- if(swlib_get_attr(dev, a, &val) < 0)
+ retval = swlib_get_attr(dev, a, &val);
+ if (retval < 0)
{
- fprintf(stderr, "failed\n");
- retval = -1;
+ nl_perror(-retval, "Failed to get attribute");
goto out;
}
print_attr_val(a, &val);
+ free_attr_val(a, &val);
putchar('\n');
break;
case CMD_LOAD: