diff options
Diffstat (limited to 'eigrpd/eigrp_interface.c')
| -rw-r--r-- | eigrpd/eigrp_interface.c | 71 |
1 files changed, 28 insertions, 43 deletions
diff --git a/eigrpd/eigrp_interface.c b/eigrpd/eigrp_interface.c index dd43dd0478..bb7a930e6d 100644 --- a/eigrpd/eigrp_interface.c +++ b/eigrpd/eigrp_interface.c @@ -55,6 +55,8 @@ #include "eigrpd/eigrp_memory.h" #include "eigrpd/eigrp_fsm.h" #include "eigrpd/eigrp_dump.h" +#include "eigrpd/eigrp_types.h" +#include "eigrpd/eigrp_metric.h" struct eigrp_interface *eigrp_if_new(struct eigrp *eigrp, struct interface *ifp, struct prefix *p) @@ -227,10 +229,24 @@ void eigrp_del_if_params(struct eigrp_if_params *eip) free(eip->auth_keychain); } +/* + * Set the network byte order of the 3 bytes we send + * of the mtu of the link. + */ +static void eigrp_mtu_convert(struct eigrp_metrics *metric, uint32_t host_mtu) +{ + uint32_t network_mtu = htonl(host_mtu); + uint8_t *nm = (uint8_t *)&network_mtu; + + metric->mtu[0] = nm[1]; + metric->mtu[1] = nm[2]; + metric->mtu[2] = nm[3]; +} + int eigrp_if_up(struct eigrp_interface *ei) { - struct eigrp_prefix_entry *pe; - struct eigrp_nexthop_entry *ne; + struct eigrp_prefix_descriptor *pe; + struct eigrp_route_descriptor *ne; struct eigrp_metrics metric; struct eigrp_interface *ei2; struct listnode *node, *nnode; @@ -254,23 +270,21 @@ int eigrp_if_up(struct eigrp_interface *ei) metric.delay = eigrp_delay_to_scaled(ei->params.delay); metric.load = ei->params.load; metric.reliability = ei->params.reliability; - metric.mtu[0] = 0xDC; - metric.mtu[1] = 0x05; - metric.mtu[2] = 0x00; + eigrp_mtu_convert(&metric, ei->ifp->mtu); metric.hop_count = 0; metric.flags = 0; metric.tag = 0; /*Add connected entry to topology table*/ - ne = eigrp_nexthop_entry_new(); + ne = eigrp_route_descriptor_new(); ne->ei = ei; ne->reported_metric = metric; ne->total_metric = metric; ne->distance = eigrp_calculate_metrics(eigrp, metric); ne->reported_distance = 0; ne->adv_router = eigrp->neighbor_self; - ne->flags = EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG; + ne->flags = EIGRP_ROUTE_DESCRIPTOR_SUCCESSOR_FLAG; struct prefix dest_addr; @@ -280,7 +294,7 @@ int eigrp_if_up(struct eigrp_interface *ei) &dest_addr); if (pe == NULL) { - pe = eigrp_prefix_entry_new(); + pe = eigrp_prefix_descriptor_new(); pe->serno = eigrp->serno; pe->destination = (struct prefix *)prefix_ipv4_new(); prefix_copy(pe->destination, &dest_addr); @@ -292,10 +306,10 @@ int eigrp_if_up(struct eigrp_interface *ei) pe->state = EIGRP_FSM_STATE_PASSIVE; pe->fdistance = eigrp_calculate_metrics(eigrp, metric); pe->req_action |= EIGRP_FSM_NEED_UPDATE; - eigrp_prefix_entry_add(eigrp->topology_table, pe); + eigrp_prefix_descriptor_add(eigrp->topology_table, pe); listnode_add(eigrp->topology_changes_internalIPV4, pe); - eigrp_nexthop_entry_add(eigrp, pe, ne); + eigrp_route_descriptor_add(eigrp, pe, ne); for (ALL_LIST_ELEMENTS(eigrp->eiflist, node, nnode, ei2)) { eigrp_update_send(ei2); @@ -307,7 +321,7 @@ int eigrp_if_up(struct eigrp_interface *ei) struct eigrp_fsm_action_message msg; ne->prefix = pe; - eigrp_nexthop_entry_add(eigrp, pe, ne); + eigrp_route_descriptor_add(eigrp, pe, ne); msg.packet_type = EIGRP_OPC_UPDATE; msg.eigrp = eigrp; @@ -416,7 +430,7 @@ uint8_t eigrp_default_iftype(struct interface *ifp) void eigrp_if_free(struct eigrp_interface *ei, int source) { struct prefix dest_addr; - struct eigrp_prefix_entry *pe; + struct eigrp_prefix_descriptor *pe; struct eigrp *eigrp = ei->eigrp; if (source == INTERFACE_DOWN_BY_VTY) { @@ -429,7 +443,8 @@ void eigrp_if_free(struct eigrp_interface *ei, int source) pe = eigrp_topology_table_lookup_ipv4(eigrp->topology_table, &dest_addr); if (pe) - eigrp_prefix_entry_delete(eigrp, eigrp->topology_table, pe); + eigrp_prefix_descriptor_delete(eigrp, eigrp->topology_table, + pe); eigrp_if_down(ei); @@ -494,33 +509,3 @@ struct eigrp_interface *eigrp_if_lookup_by_name(struct eigrp *eigrp, return NULL; } - -uint32_t eigrp_bandwidth_to_scaled(uint32_t bandwidth) -{ - uint64_t temp_bandwidth = (256ull * 10000000) / bandwidth; - - temp_bandwidth = temp_bandwidth < EIGRP_MAX_METRIC ? temp_bandwidth - : EIGRP_MAX_METRIC; - - return (uint32_t)temp_bandwidth; -} - -uint32_t eigrp_scaled_to_bandwidth(uint32_t scaled) -{ - uint64_t temp_scaled = scaled * (256ull * 10000000); - - temp_scaled = - temp_scaled < EIGRP_MAX_METRIC ? temp_scaled : EIGRP_MAX_METRIC; - - return (uint32_t)temp_scaled; -} - -uint32_t eigrp_delay_to_scaled(uint32_t delay) -{ - return delay * 256; -} - -uint32_t eigrp_scaled_to_delay(uint32_t scaled) -{ - return scaled / 256; -} |
