def _set_nexthop_group(self, name, entries=[]): """ { "command": "set", "type": "nexthop-group" "name": "CYGNUS_NHG_1", "entries": [ { "nexthop": "172.16.130.1", "label": [30, 31, 32] }, { "nexthop": "172.16.130.2", "label": [40, 41, 42] } ] } """ nhg = eossdk.NexthopGroup(name, eossdk.NEXTHOP_GROUP_MPLS) for index, entry in enumerate(entries): labels = tuple([eossdk.MplsLabel(l) for l in entry["label"]]) action = eossdk.NexthopGroupMplsAction(eossdk.MPLS_ACTION_PUSH, labels) nhe = eossdk.NexthopGroupEntry(eossdk.IpAddr(entry["nexthop"])) nhe.mpls_action_is(action) nhg.nexthop_set(index, nhe) self.nhg_mgr.nexthop_group_set(nhg)
def _buildNexthopGroups(self): groups = self.config_.nexthop_groups for name, data in groups.iteritems(): if data.type not in NEXTHOP_GROUP_TYPE: sys.stderr.write('Unknown nexthop group type="%s"' % data.type) continue t = data.type.lower() group = eossdk.NexthopGroup(name, NEXTHOP_GROUP_TYPE.get(t)) # Set common parameters for i, dst in enumerate(data.dst_ips): ip = get_ip_addr(dst) if ip is not None: print 'Adding IP' group.destination_ip_set(i, ip) if t == 'ipinip' or t == 'gre': if data.src_intf: if self.intf_mgr.exists(eossdk.IntfId(data.src_intf)): group.source_intf_is(eossdk.IntfId(data.src_intf)) elif data.src_ips: pass # not yet supported elif t == 'mpls': sys.stderr.write('MPLS nexthop-groups are not yet supported\n') # Set the nexthop group print 'Setting nexthop group:', name self.nexthop_group_mgr.nexthop_group_set(group)
def on_route_set(self, route): self.tracer.trace0("Last added hardware route entry %s" % route.route_key().prefix().to_string()) syslog.syslog("Last Added Route %s" % route.route_key().prefix().to_string()) cli = "show ip bgp %s" % route.route_key().prefix().to_string() route_detail = self.eapi_execute(cli) if self.community_list_check(route_detail): self.update_acl(route.route_key().prefix().to_string()) self.aclMgr_.acl_commit() syslog.syslog("ACL Commited") #for acl_rule in self.aclMgr_.acl_rule_ip_iter(self.aclKey): # syslog.syslog("%s"% (acl_rule[1].to_string(),)) if self.aclMgr_.acl_exists(self.aclKey): syslog.syslog("ACL Key Created") # Now build the class map for that ACL and commit it self.classMapKey = eossdk.PolicyMapKey( REDIRECTCLASS, eossdk.POLICY_FEATURE_PBR) self.class_map = eossdk.ClassMap(self.classMapKey) self.classMapRule = eossdk.ClassMapRule(self.aclKey) self.class_map.rule_set(10, self.classMapRule) self.classMapMgr_.class_map_is(self.class_map) self.cm = self.classMapMgr_.class_map(self.classMapKey) syslog.syslog("Set class map %s with %d rules" % (REDIRECTCLASS, len(self.cm.rules()))) # Build the nexthop group that will setup the GRE tunnel self.nhg = eossdk.NexthopGroup(REDIRECTNHG, eossdk.NEXTHOP_GROUP_GRE) self.nhgEntry1 = eossdk.NexthopGroupEntry( eossdk.IpAddr(NHGDSTPREFIX)) self.nhg.nexthop_set(0, self.nhgEntry1) self.nhg.source_ip_is(eossdk.IpAddr(NHGSRCPREFIX)) self.nexthopGroupMgr_.nexthop_group_set(self.nhg) # Add the policy map rule matching our class map and tunnel the traffic self.policyMapKey = eossdk.PolicyMapKey( REDIRECTPOLICY, eossdk.POLICY_FEATURE_PBR) self.policy_map = eossdk.PolicyMap(self.policyMapKey) self.policyMapRule = eossdk.PolicyMapRule(self.classMapKey) self.policyMapAction = eossdk.PolicyMapAction( eossdk.POLICY_ACTION_NEXTHOP_GROUP) self.policyMapAction.nexthop_group_name_is(REDIRECTNHG) self.policyMapRule.action_set(self.policyMapAction) self.policy_map.rule_set(1, self.policyMapRule) self.policyMapMgr_.policy_map_is(self.policy_map) self.policyMapMgr_.policy_map_apply( self.policyMapKey, eossdk.IntfId(INTERFACENAME), eossdk.ACL_IN, True) syslog.syslog("Finished applying policy") else: syslog.syslog("ACL Key Not Created")
def set_nexthop_group(self): self.tracer.trace1("Setting nexthop group") # Create a nexthop-group mpls_nhg: # nexthop-group mpls_nhg type mpls # size 256 # entry 0 push label-stack 16 nexthop 10.0.0.8 nhgName = "mpls_nhg" label = 16 entry = 0 addrStr = "10.0.0.8" nhg = eossdk.NexthopGroup(nhgName, eossdk.NEXTHOP_GROUP_MPLS) nhge = eossdk.NexthopGroupEntry(eossdk.IpAddr(addrStr)) mplsAction = eossdk.NexthopGroupMplsAction(eossdk.MPLS_ACTION_PUSH, (eossdk.MplsLabel(label), )) nhge.mpls_action_is(mplsAction) nhg.nexthop_set(entry, nhge) self.nhgMgr.nexthop_group_set(nhg)