From ee7ba9875d2b1662fc13a96d082a31cc4258465f Mon Sep 17 00:00:00 2001 From: David Ward Date: Thu, 15 Oct 2009 14:53:13 -0400 Subject: [PATCH] iproute2: Add ll_index_to_addr function After calling ll_init_map, all of the information stored in the link-layer map can be retrieved by function calls (ll_index_to_*), except for the link-layer address. This patch fills the gap by adding a ll_index_to_addr function. Changes welcome. Signed-off-by: David Ward --- include/ll_map.h | 2 ++ lib/ll_map.c | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/include/ll_map.h b/include/ll_map.h index c4d5c6d1..752b8279 100644 --- a/include/ll_map.h +++ b/include/ll_map.h @@ -9,5 +9,7 @@ extern const char *ll_index_to_name(unsigned idx); extern const char *ll_idx_n2a(unsigned idx, char *buf); extern int ll_index_to_type(unsigned idx); extern unsigned ll_index_to_flags(unsigned idx); +extern unsigned ll_index_to_addr(unsigned idx, unsigned char *addr, + unsigned alen); #endif /* __LL_MAP_H__ */ diff --git a/lib/ll_map.c b/lib/ll_map.c index a96c59ea..5addf4a4 100644 --- a/lib/ll_map.c +++ b/lib/ll_map.c @@ -134,6 +134,27 @@ unsigned ll_index_to_flags(unsigned idx) return 0; } +unsigned ll_index_to_addr(unsigned idx, unsigned char *addr, + unsigned alen) +{ + struct idxmap *im; + + if (idx == 0) + return 0; + + for (im = idxmap[idx&0xF]; im; im = im->next) { + if (im->index == idx) { + if (alen > sizeof(im->addr)) + alen = sizeof(im->addr); + if (alen > im->alen) + alen = im->alen; + memcpy(addr, im->addr, alen); + return alen; + } + } + return 0; +} + unsigned ll_name_to_index(const char *name) { static char ncache[16];