/* SPDX-License-Identifier: LGPL-2.1+ */
#include <ctype.h>
+#include <net/if.h>
#include "alloc-util.h"
#include "fd-util.h"
uint32_t uint32;
uint64_t uint64;
int percent; /* we use 'int' as datatype for percent values in order to match the result of parse_percent() */
+ int ifindex;
/* … add more here as we start supporting more cell data types … */
};
} TableData;
case TABLE_INT:
case TABLE_UINT:
case TABLE_PERCENT:
+ case TABLE_IFINDEX:
return sizeof(int);
default:
uint32_t uint32;
uint64_t uint64;
int percent;
+ int ifindex;
bool b;
} buffer;
data = &buffer.percent;
break;
+ case TABLE_IFINDEX:
+ buffer.ifindex = va_arg(ap, int);
+ data = &buffer.ifindex;
+ break;
+
case _TABLE_DATA_TYPE_MAX:
/* Used as end marker */
va_end(ap);
case TABLE_PERCENT:
return CMP(a->percent, b->percent);
+ case TABLE_IFINDEX:
+ return CMP(a->ifindex, b->ifindex);
+
default:
;
}
break;
}
+ case TABLE_IFINDEX: {
+ _cleanup_free_ char *p;
+ char name[IF_NAMESIZE + 1] = {};
+
+ if (if_indextoname(d->ifindex, name)) {
+ p = strdup(name);
+ if (!p)
+ return NULL;
+ } else {
+ if (asprintf(&p, "%i" , d->ifindex) < 0)
+ return NULL;
+ }
+
+ d->formatted = TAKE_PTR(p);
+ break;
+ }
+
default:
assert_not_reached("Unexpected type?");
}
case TABLE_PERCENT:
return json_variant_new_integer(ret, d->percent);
+ case TABLE_IFINDEX:
+ return json_variant_new_integer(ret, d->ifindex);
+
default:
return -EINVAL;
}