Skip to content

Commit

Permalink
Admin distance set from config file
Browse files Browse the repository at this point in the history
  • Loading branch information
Jean Michel MacKay authored and greearb committed Feb 7, 2013
1 parent 48a3596 commit ec98454
Show file tree
Hide file tree
Showing 8 changed files with 58 additions and 2 deletions.
14 changes: 14 additions & 0 deletions xorp/etc/templates/bgp.tp
Expand Up @@ -6,6 +6,8 @@ protocols {
bgp-id: ipv4;
local-as: txt;
enable-4byte-as-numbers: bool = false;
internal-distance: u32;
external-distance: u32;

route-reflector {
cluster-id: ipv4;
Expand Down Expand Up @@ -166,6 +168,18 @@ protocols {
%set:;
}

internal-distance {
%help: short "Administrative Distance for IBGP";
%allow-range: $(@) "0" "255" %help: "Administrative Distance for IBGP";
%set: xrl "rib/rib/0.1/set_protocol_admin_distance?protocol:txt=ibgp&ipv4:bool=true&ipv6:bool=false&unicast:bool=true&multicast:bool=false&admin_distance:u32=$(@)";
}

external-distance {
%help: short "Administrative Distance for EBGP";
%allow-range: $(@) "0" "255" %help: "Administrative Distance for EBGP";
%set: xrl "rib/rib/0.1/set_protocol_admin_distance?protocol:txt=ebgp&ipv4:bool=true&ipv6:bool=false&unicast:bool=true&multicast:bool=false&admin_distance:u32=$(@)";
}

%create: xrl "$(policy.targetname)/policy/0.1/add_varmap?protocol:txt=bgp&variable:txt=network4&type:txt=ipv4net&access:txt=r&id:u32=10";
%create: xrl "$(policy.targetname)/policy/0.1/add_varmap?protocol:txt=bgp&variable:txt=network6&type:txt=ipv6net&access:txt=r&id:u32=12";
%create: xrl "$(policy.targetname)/policy/0.1/add_varmap?protocol:txt=bgp&variable:txt=nexthop4&type:txt=ipv4nexthop&access:txt=rw&id:u32=11";
Expand Down
7 changes: 7 additions & 0 deletions xorp/etc/templates/fib2mrib.tp
Expand Up @@ -5,6 +5,7 @@ protocols {
targetname: txt = "fib2mrib";
disable: toggle = false;
enabled: bool; /* %deprecated */
distance: u32;
}
}

Expand Down Expand Up @@ -54,6 +55,12 @@ protocols {
%create:;
%set: xrl "$(fib2mrib.targetname)/fib2mrib/0.1/enable_fib2mrib?enable:bool=$(@)";
}

distance {
%help: short "Administrative Distance for FIB2MRIB";
%allow-range: $(@) "0" "255" %help: "Administrative Distance for FIB2MRIB";
%set: xrl "rib/rib/0.1/set_protocol_admin_distance?protocol:txt=fib2mrib&ipv4:bool=true&ipv6:bool=false&unicast:bool=true&multicast:bool=false&admin_distance:u32=$(@)";
}
}
}

Expand Down
7 changes: 7 additions & 0 deletions xorp/etc/templates/ospfv2.tp
Expand Up @@ -6,6 +6,7 @@ protocols {
router-id: ipv4;
rfc1583-compatibility: bool = false;
ip-router-alert: bool = false;
distance: u32;

traceoptions {
flag {
Expand Down Expand Up @@ -163,6 +164,12 @@ transmitted packets";
%delete: xrl "$(ospf4.targetname)/ospfv2/0.1/set_ip_router_alert?ip_router_alert:bool=$(DEFAULT)";
}

distance {
%help: short "Administrative Distance for OSPF";
%allow-range: $(@) "0" "255" %help: "Administrative Distance for OSPF";
%set: xrl "rib/rib/0.1/set_protocol_admin_distance?protocol:txt=ospf&ipv4:bool=true&ipv6:bool=false&unicast:bool=true&multicast:bool=false&admin_distance:u32=$(@)";
}

area @: ipv4 {
%help: short "The OSPF area to which the attached network belongs";

Expand Down
7 changes: 7 additions & 0 deletions xorp/etc/templates/ospfv3.tp
Expand Up @@ -5,6 +5,7 @@ protocols {
targetname: txt = "ospfv3";
router-id: ipv4;
ip-router-alert: bool = false;
distance: u32;

traceoptions {
flag {
Expand Down Expand Up @@ -130,6 +131,12 @@ transmitted packets";
%delete: xrl "$(ospf6.@.targetname)/ospfv3/0.1/set_ip_router_alert?ip_router_alert:bool=$(DEFAULT)";
}

distance {
%help: short "Administrative Distance for OSPF";
%allow-range: $(@) "0" "255" %help: "Administrative Distance for OSPF";
%set: xrl "rib/rib/0.1/set_protocol_admin_distance?protocol:txt=ospf&ipv4:bool=true&ipv6:bool=false&unicast:bool=true&multicast:bool=false&admin_distance:u32=$(@)";
}

area @: ipv4 {
%help: short "The OSPF area to which the attached network belongs";

Expand Down
7 changes: 7 additions & 0 deletions xorp/etc/templates/rip.tp
Expand Up @@ -7,6 +7,7 @@
protocols {
rip {
targetname: txt = "rip";
distance: u32;
traceoptions {
flag {
all {
Expand Down Expand Up @@ -95,6 +96,12 @@ protocols {
%set:;
}

distance {
%help: short "Administrative Distance for RIP";
%allow-range: $(@) "0" "255" %help: "Administrative Distance for RIP";
%set: xrl "rib/rib/0.1/set_protocol_admin_distance?protocol:txt=rip&ipv4:bool=true&ipv6:bool=false&unicast:bool=true&multicast:bool=false&admin_distance:u32=$(@)";
}

traceoptions {
%help: short "Configure the tracing options";
flag {
Expand Down
7 changes: 7 additions & 0 deletions xorp/etc/templates/static_routes.tp
Expand Up @@ -4,6 +4,7 @@ protocols {
targetname: txt = "static_routes";
disable: toggle = false;
enabled: bool; /* %deprecated */
distance: u32;

route @: ipv4net {
next-hop: ipv4;
Expand Down Expand Up @@ -210,6 +211,12 @@ protocols {
%set: xrl "$(static.targetname)/static_routes/0.1/enable_static_routes?enable:bool=$(@)";
}

distance {
%help: short "Administrative Distance for Static";
%allow-range: $(@) "0" "255" %help: "Administrative Distance for Static";
%set: xrl "rib/rib/0.1/set_protocol_admin_distance?protocol:txt=static&ipv4:bool=true&ipv6:bool=false&unicast:bool=true&multicast:bool=false&admin_distance:u32=$(@)";
}

route @: ipv4net {
%help: short "Configure a static route";
%mandatory: $(@.next-hop);
Expand Down
6 changes: 4 additions & 2 deletions xorp/rib/rib.cc
Expand Up @@ -222,11 +222,13 @@ RIB<A>::set_protocol_admin_distance(const string& protocol_name,
map<string, uint32_t>::iterator mi = _admin_distances.find(protocol_name);
if (mi != _admin_distances.end()) {
OriginTable<A>* ot = find_origin_table(protocol_name);
if (NULL != ot) {
if (NULL != ot && ot->route_count() > 0) {
XLOG_ERROR("May not set an admin distance for protocol \"%s\", "
"which has already instantiated an origin table.",
"which has already instantiated an origin table and contains routes.",
protocol_name.c_str());
return XORP_ERROR;
} else if (NULL != ot && ot->route_count() == 0) {
ot->change_admin_distance(admin_distance);
}
}
_admin_distances[protocol_name] = admin_distance;
Expand Down
5 changes: 5 additions & 0 deletions xorp/rib/rt_tab_origin.hh
Expand Up @@ -144,6 +144,11 @@ public:
*/
RouteRange<A>* lookup_route_range(const A& addr) const;

/**
* Changes the admin distance
**/
void change_admin_distance( uint32_t ad ){ _admin_distance = ad; }

/**
* @return the default administrative distance for this OriginTable
*/
Expand Down

0 comments on commit ec98454

Please sign in to comment.