]> git.proxmox.com Git - mirror_iproute2.git/commitdiff
iproute2: Add ll_index_to_addr function
authorDavid Ward <david.ward@ll.mit.edu>
Thu, 15 Oct 2009 18:53:13 +0000 (14:53 -0400)
committerStephen Hemminger <stephen.hemminger@vyatta.com>
Tue, 1 Dec 2009 23:54:16 +0000 (15:54 -0800)
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 <david.ward@ll.mit.edu>
include/ll_map.h
lib/ll_map.c

index c4d5c6d1b0188a59840648a162d28e472cdc5895..752b82794cdb0e30cf3a3518eb902b4e8206811c 100644 (file)
@@ -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__ */
index a96c59ea6af23947ecbf42bf2f893ea07932ed3e..5addf4a4cf4ba18bcdf574554d89c04b5a009c45 100644 (file)
@@ -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];