ripd_state_neighbors_neighbor_get_next(const char *xpath,
const void *list_entry)
{
- /* TODO: implement me. */
- return NULL;
+ struct listnode *node;
+
+ if (list_entry == NULL)
+ node = listhead(peer_list);
+ else
+ node = listnextnode((struct listnode *)list_entry);
+
+ return node;
}
static int ripd_state_neighbors_neighbor_get_keys(const void *list_entry,
struct yang_list_keys *keys)
{
- /* TODO: implement me. */
+ const struct listnode *node = list_entry;
+ const struct rip_peer *peer = listgetdata(node);
+
+ keys->num = 1;
+ (void)inet_ntop(AF_INET, &peer->addr, keys->key[0].value,
+ sizeof(keys->key[0].value));
+
return NB_OK;
}
static const void *
ripd_state_neighbors_neighbor_lookup_entry(const struct yang_list_keys *keys)
{
- /* TODO: implement me. */
- return NULL;
+ struct in_addr address;
+
+ yang_str2ipv4(keys->key[0].value, &address);
+
+ return rip_peer_lookup(&address);
}
/*
ripd_state_neighbors_neighbor_address_get_elem(const char *xpath,
const void *list_entry)
{
- /* TODO: implement me. */
- return NULL;
+ const struct rip_peer *peer = list_entry;
+
+ return yang_data_new_ipv4(xpath, &peer->addr);
}
/*
ripd_state_neighbors_neighbor_last_update_get_elem(const char *xpath,
const void *list_entry)
{
- /* TODO: implement me. */
+ /* TODO: yang:date-and-time is tricky */
return NULL;
}
ripd_state_neighbors_neighbor_bad_packets_rcvd_get_elem(const char *xpath,
const void *list_entry)
{
- /* TODO: implement me. */
- return NULL;
+ const struct rip_peer *peer = list_entry;
+
+ return yang_data_new_uint32(xpath, peer->recv_badpackets);
}
/*
ripd_state_neighbors_neighbor_bad_routes_rcvd_get_elem(const char *xpath,
const void *list_entry)
{
- /* TODO: implement me. */
- return NULL;
+ const struct rip_peer *peer = list_entry;
+
+ return yang_data_new_uint32(xpath, peer->recv_badroutes);
}
/*
DECLARE_HOOK(rip_ifaddr_add, (struct connected * ifc), (ifc))
DECLARE_HOOK(rip_ifaddr_del, (struct connected * ifc), (ifc))
+extern struct list *peer_list;
extern struct route_table *rip_distance_table;
extern vector Vrip_passive_nondefault;