SimpleFabric application is built to replace legacy leaf networks where lP subnes are collocated with each L2 Network and do simple IP routing to upper gateway to Internet
Features
L2 Unicast Forwarding
- Intra-Subnet is handled by Destination MAC matching Intents; based on HostService information
L2 Broadcast Forwarding
- Intra-Subnet broadcast is handles by Destination MAC matching Intents; base on L2Network configuration
L3 Unicast Inter-Subnet Forwarding
- Inter-Subnet IP Traffic forwarding by Destination IP matching Intents; Reactive Routing
L3 Unicast Upper Route Forwarding
- Subnet to Outer Gateway IP Traffic forwarding by Destination IP matching Intents; Reactive Routing
ARP Handing
- ARP messages are forward as unicast or broadcast by IP-Subnet, L2Network configuration info
ARP and ICMP Echo Handling on Virtual Gateway IP
- ARP and Ping requests on Virtual Gateway IP are handled
Fault Tolerance
- All forwarding are activated by Intents Framework which auto reconfigures on link failures
Configuration
L2Networks
- name: name of L2Network to be used by IpSubnets
- interfaces: interfaces names of ports of this L2Network
- l2Forward: yes to enable L2 Destination MAC based forwarding
IpSubnets
- ipPrefix: IP subnet range
- gatewayIp: Virtual Gateway IP address
- gatewayMac: Virtual Gateway Mac address
- l2NetworkName: L2Network this IpSubnet is collocated
BorderRoutes
- ipPrefix: route prefix
- nextHop: outer gateway IP
Example network-cfg.json file:
{
"devices":{
... list of devices ...
"of:0000000000000011":{ "basic":{ "name":"LS1", "latitude":35, "longitude":-100 } },
"of:0000000000000012":{ "basic":{ "name":"LS2", "latitude":35, "longitude":-90 } },
"of:0000000000000021":{ "basic":{ "name":"SS1", "latitude":40, "longitude":-100 } },
"of:0000000000000022":{ "basic":{ "name":"SS2", "latitude":40, "longitude":-90 } }
},
"ports" : {
... list of port/interfaces ...
"of:0000000000000011/1" : { "interfaces" : [ { "name" : "h11" } ] },
"of:0000000000000011/2" : { "interfaces" : [ { "name" : "h12" } ] },
"of:0000000000000011/3" : { "interfaces" : [ { "name" : "h13" } ] },
"of:0000000000000011/4" : { "interfaces" : [ { "name" : "h14" } ] },
"of:0000000000000011/5" : { "interfaces" : [ { "name" : "d11" } ] },
"of:0000000000000011/6" : { "interfaces" : [ { "name" : "d12" } ] },
"of:0000000000000011/7" : { "interfaces" : [ { "name" : "LS1_SS1" } ] },
"of:0000000000000011/8" : { "interfaces" : [ { "name" : "LS1_SS2" } ] },
"of:0000000000000012/1" : { "interfaces" : [ { "name" : "h21" } ] } ,
"of:0000000000000012/2" : { "interfaces" : [ { "name" : "h22" } ] },
"of:0000000000000012/3" : { "interfaces" : [ { "name" : "h23" } ] },
"of:0000000000000012/4" : { "interfaces" : [ { "name" : "h24" } ] },
"of:0000000000000012/5" : { "interfaces" : [ { "name" : "d21" } ] },
"of:0000000000000012/6" : { "interfaces" : [ { "name" : "d22" } ] },
"of:0000000000000012/7" : { "interfaces" : [ { "name" : "LS2_SS1" } ] },
"of:0000000000000012/8" : { "interfaces" : [ { "name" : "LS2_SS2" } ] },
"of:0000000000000021/1" : { "interfaces" : [ { "name" : "SS1_LS1" } ] },
"of:0000000000000021/2" : { "interfaces" : [ { "name" : "SS1_LS2" } ] },
"of:0000000000000022/1" : { "interfaces" : [ { "name" : "SS2_LS1" } ] },
"of:0000000000000022/2" : { "interfaces" : [ { "name" : "SS2_LS2" } ] }
},
"apps" : {
"org.onosproject.simplefabric" : {
"simpleFabric" : {
"l2Networks" : [
{ "name" : "LEAF1", "interfaces" : ["h11", "h12", "h13", "h14", "d11", "d12" ], "l2Forward" : true },
{ "name" : "LEAF2", "interfaces" : ["h21", "h22", "h23", "h24", "d21", "d22" ], "l2Forward" : true }
],
"ipSubnets" : [
{ "ipPrefix" : "10.0.1.0/24", "gatewayIp" : "10.0.1.1", "gatewayMac" : "00:00:10:00:01:01", "l2NetworkName" : "LEAF1" },
{ "ipPrefix" : "10.0.2.0/24", "gatewayIp" : "10.0.2.1", "gatewayMac" : "00:00:10:00:02:01", "l2NetworkName" : "LEAF2" }
],
"borderRoutes" : [
{ "ipPrefix" : "0.0.0.0/0", "nextHop" : "10.0.1.2" }
]
}
}
}
}
Modules
Topology configurations and events are all maintained by SimpleFabricManager and notified to sub modules to apply updates status.
Reactive Routing is handled by SimpleFabricReactiveRouting module and ARPs are forwarded by SimpleFabricNeighbour module.