original_docstring: 
          @brief Pass a packet through this control_flow
          @param parsed_packet A parsed packet instance to be processed
          @returns One of "drop", "queue", or "egress"
  
          May consider deriving first_table_name from packet metadata
          
docstring: 
  
  May consider deriving first_table_name from packet metadata
docstring_tokens: May consider deriving first_table_name from packet metadata
code: def process(self, parsed_packet):
          """
          @brief Pass a packet through this control_flow
          @param parsed_packet A parsed packet instance to be processed
          @returns One of "drop", "queue", or "egress"
  
          May consider deriving first_table_name from packet metadata
          """
          current_table = self.first_table_name
  
          logging.debug("Pipeline %s on pkt %d" % (self.name, parsed_packet.id))
  
          current_table_name = self.first_table_name
          while current_table_name != "exit_control_flow":
              air_assert(current_table_name in self.transitions.keys(),
                         "Table %s is not in control_flow" % current_table_name)
              current_table = self.table_map[current_table_name]
              transitions = self.transitions[current_table_name]
  
              #
              # Execute a table and get back the hit/miss status and
              # and action (name) taken.
              #
              # Special names include "queue" and "egress" for exiting
              # the control_flow.
              #
              # Precedence for hit/miss/action control flow resolution
              #   "Miss" takes precedence if miss and action are both indicated.
              #   Specific action takes precedence over "hit" indication.
              #   Finally, generic "hit" is checked.
              #
  
              (hit, action) = current_table.process_packet(parsed_packet)
              # @FIXME Apply action to the packet
  
              current_table_name = "exit_control_flow"
              if "always" in transitions.keys():
                  current_table_name = transitions["always"]
  
              elif not hit:
                  if "miss" in transitions.keys():
                      current_table_name = transitions["miss"]
                  elif action and action in transitions.keys():
                      current_table_name = transitions[action]
  
              else: # Hit
                  if action in transitions.keys(): 
                      current_table_name = transitions[action]
                  elif "hit" in transitions.keys():
                      current_table_name = transitions["hit"]
                  elif "default" in transition.keys():
                      current_table_name = transitions["default"]
  
          logging.debug("Pipeline %s, pkt %d: calling to %s",
                        self.name, parsed_packet.id, self.next_processor.name)
  
          self.next_processor.process(parsed_packet)
code_tokens: def process ( self , parsed_packet ) : current_table = self . first_table_name logging . debug ( "Pipeline %s on pkt %d" % ( self . name , parsed_packet . id ) ) current_table_name = self . first_table_name while current_table_name != "exit_control_flow" : air_assert ( current_table_name in self . transitions . keys ( ) , "Table %s is not in control_flow" % current_table_name ) current_table = self . table_map [ current_table_name ] transitions = self . transitions [ current_table_name ] ( hit , action ) = current_table . process_packet ( parsed_packet ) current_table_name = "exit_control_flow" if "always" in transitions . keys ( ) : current_table_name = transitions [ "always" ] elif not hit : if "miss" in transitions . keys ( ) : current_table_name = transitions [ "miss" ] elif action and action in transitions . keys ( ) : current_table_name = transitions [ action ] else : if action in transitions . keys ( ) : current_table_name = transitions [ action ] elif "hit" in transitions . keys ( ) : current_table_name = transitions [ "hit" ] elif "default" in transition . keys ( ) : current_table_name = transitions [ "default" ] logging . debug ( "Pipeline %s, pkt %d: calling to %s" , self . name , parsed_packet . id , self . next_processor . name ) self . next_processor . process ( parsed_packet )
short_docstring: @brief Pass a packet through this control_flow
  @param parsed_packet A parsed packet instance to be processed
  @returns One of "drop", "queue", or "egress"
short_docstring_tokens: @brief Pass a packet through this control_flow @param parsed_packet A parsed packet instance to be processed @returns One of " drop " " queue " or " egress "
comment: """
          @brief Pass a packet through this control_flow
          @param parsed_packet A parsed packet instance to be processed
          @returns One of "drop", "queue", or "egress"
  
          May consider deriving first_table_name from packet metadata
          """$SEP$#$SEP$# Execute a table and get back the hit/miss status and$SEP$# and action (name) taken.$SEP$#$SEP$# Special names include "queue" and "egress" for exiting$SEP$# the control_flow.$SEP$#$SEP$# Precedence for hit/miss/action control flow resolution$SEP$#   "Miss" takes precedence if miss and action are both indicated.$SEP$#   Specific action takes precedence over "hit" indication.$SEP$#   Finally, generic "hit" is checked.$SEP$#$SEP$# @FIXME Apply action to the packet$SEP$# Hit