def find_fib_entry(
            self,
            name: Name,
            already_used_face: List[int] = None,
            incoming_faceids: List[int] = None
    ) -> ForwardingInformationBaseEntry:
        components = name.components[:]
        for i in range(0, len(name.components)):
            complen = len(components)
            for fib_entry in self._container:
                # if already_used and fib_entry in already_used:
                #     continue
                forward_faceids = []
                if fib_entry.name.components != components:
                    continue
                #TODO here you should check if all the faces in this fib_entry are used
                for face in fib_entry.faceid:
                    if already_used_face and face in already_used_face:
                        continue
                    if not incoming_faceids or face not in incoming_faceids:
                        forward_faceids.append(face)

                # Here we have a list of face ids that
                #   - match the name fully
                #   - not already used
                #   - not in the interested faces
                if len(forward_faceids) == 0:
                    continue
                return ForwardingInformationBaseEntry(fib_entry.name,
                                                      forward_faceids)
            components = components[:complen - 1]
        return None
Example #2
0
 def add_fib_entry(self,
                   name: Name,
                   faceid: List[int],
                   static: bool = False):
     assert (isinstance(faceid, List))
     fib_entry = ForwardingInformationBaseEntry(name, faceid, static)
     if fib_entry not in self._container:
         self._container.insert(0, fib_entry)
 def find_fib_entry(self, name: Name, already_used: List[ForwardingInformationBaseEntry] = None,
                    incoming_faceids: List[int] = None) -> Optional[ForwardingInformationBaseEntry]:
     components = name.components[:]
     for i in range(0, len(name.components)):
         complen = len(components)
         for fib_entry in self._container:
             if already_used and fib_entry in already_used:
                 continue
             forward_faceids = []
             if fib_entry.name.components != components:
                 continue
             for faceid in fib_entry.faceid:
                 if not incoming_faceids or faceid not in incoming_faceids:
                     forward_faceids.append(faceid)
             if len(forward_faceids) == 0:
                 continue
             return ForwardingInformationBaseEntry(fib_entry.name, forward_faceids)
         components = components[:complen - 1]
     return None
Example #4
0
 def add_fib_entry(self, name: Name, faceid: int, static: bool = False):
     fib_entry = ForwardingInformationBaseEntry(name, faceid, static)
     if fib_entry not in self._container:
         self._container.insert(0, fib_entry)