Lines Matching defs:ri

133 len_route_tlv(struct rinfo *ri)
137 switch (ri->af) {
139 len += sizeof(ri->nexthop.v4);
140 len += PREFIX_SIZE4(ri->prefixlen);
143 len += sizeof(ri->nexthop.v6);
144 len += PREFIX_SIZE6(ri->prefixlen);
150 len += sizeof(ri->metric);
151 if (ri->type == EIGRP_ROUTE_EXTERNAL)
152 len += sizeof(ri->emetric);
154 len += sizeof(ri->prefixlen);
160 gen_route_tlv(struct ibuf *buf, struct rinfo *ri)
170 switch (ri->af) {
181 switch (ri->type) {
199 switch (ri->af) {
201 addr.s_addr = htonl(ri->nexthop.v4.s_addr);
204 tlvlen += sizeof(ri->nexthop.v4);
207 if (ibuf_add(buf, &ri->nexthop.v6, sizeof(ri->nexthop.v6)))
209 tlvlen += sizeof(ri->nexthop.v6);
216 if (ri->type == EIGRP_ROUTE_EXTERNAL) {
217 emetric = ri->emetric;
229 metric = ri->metric;
237 if (ibuf_add(buf, &ri->prefixlen, sizeof(ri->prefixlen)))
239 switch (ri->af) {
241 pflen = PREFIX_SIZE4(ri->prefixlen);
242 if (ibuf_add(buf, &ri->prefix.v4, pflen))
246 pflen = PREFIX_SIZE6(ri->prefixlen);
247 if (ibuf_add(buf, &ri->prefix.v6, pflen))
358 tlv_decode_route(int af, struct tlv *tlv, char *buf, struct rinfo *ri)
362 ri->af = af;
363 switch (ri->af) {
366 max_plen = sizeof(ri->prefix.v4);
370 max_plen = sizeof(ri->prefix.v6);
378 ri->type = EIGRP_ROUTE_INTERNAL;
381 ri->type = EIGRP_ROUTE_EXTERNAL;
398 memcpy(&ri->nexthop.v4, buf + offset, sizeof(ri->nexthop.v4));
399 offset += sizeof(ri->nexthop.v4);
402 memcpy(&ri->nexthop.v6, buf + offset, sizeof(ri->nexthop.v6));
403 offset += sizeof(ri->nexthop.v6);
410 if (ri->type == EIGRP_ROUTE_EXTERNAL) {
411 memcpy(&ri->emetric, buf + offset, sizeof(ri->emetric));
412 ri->emetric.routerid = ntohl(ri->emetric.routerid);
413 ri->emetric.as = ntohl(ri->emetric.as);
414 ri->emetric.tag = ntohl(ri->emetric.tag);
415 ri->emetric.metric = ntohl(ri->emetric.metric);
416 ri->emetric.reserved = ntohs(ri->emetric.reserved);
417 offset += sizeof(ri->emetric);
421 memcpy(&ri->metric, buf + offset, sizeof(ri->metric));
422 ri->metric.delay = ntohl(ri->metric.delay);
423 ri->metric.bandwidth = ntohl(ri->metric.bandwidth);
424 offset += sizeof(ri->metric);
427 memcpy(&ri->prefixlen, buf + offset, sizeof(ri->prefixlen));
428 offset += sizeof(ri->prefixlen);
449 memset(&ri->prefix.v4, 0, sizeof(ri->prefix.v4));
450 memcpy(&ri->prefix.v4, buf + offset, plen);
453 memset(&ri->prefix.v6, 0, sizeof(ri->prefix.v6));
454 memcpy(&ri->prefix.v6, buf + offset, plen);
461 if (bad_addr(af, &ri->prefix) ||
462 (af == AF_INET6 && IN6_IS_SCOPE_EMBED(&ri->prefix.v6))) {
464 log_addr(af, &ri->prefix));
469 eigrp_applymask(af, &ri->prefix, &ri->prefix, ri->prefixlen);