Esempio n. 1
0
    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)
Esempio n. 2
0
   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)
Esempio n. 3
0
    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")
Esempio n. 4
0
 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)