docs: def _process_actions(self, actions, inport, packet):
          '''
          Process actions in order, in two stages.  Each action implements a __call__, which
          applies any packet-level changes or other non-output changes.  The functors
          can optionally return another function to be applied at the second stage.
          '''
          second_stage = []
          for a in actions:
              fn = a(packet=packet, net=self._switchyard_net, controllers=self._controller_connections, inport=inport)
              if (fn):
                  second_stage.append(fn)
          for fn in second_stage:
              fn()