天天看點

zebra netlink擷取接口資訊

zebra通過netlink機制擷取主機接口資訊。

具體過程如下:

main.c—》(if_netlink.c) interface_list()

                          —》(rt_netlink.c) interface_lookup_netlink()

interface_lookup_netlink 通過 

netlink_request函數與核心通信,發送相應的請求資訊(getlink,getaddr);

                          接口name、index等屬性 與接口ip位址是分别擷取的。

netlink_parse_info函數收到核心回報的資料,進行相應的解析;   

                        其中netlink_interface 解析接口name、index等資訊,并插入到iflist連結清單中;

                             netlink_interface_addr通過接口index找到接口,并添加相應接口IP位址。

netlink_parse_info 函數内

                  通過buf接收核心回報的資料,一般的buf大小為4096,經過測試發現,這可以支援9個接口資訊,

如果接口資訊增加,則由于接收的資訊過多,導緻記憶體溢出,進而導緻接收的接口資訊與IP位址不全,進而影響

後續的路由處理,比如:ipv6的nexthop為全零(::) 

繼續閱讀