code: def process_pdu(self, pdu):
          
          if _debug: Network._debug("process_pdu(%s) %r", self.name, pdu)
  
          # if there is a traffic log, call it with the network name and pdu
          if self.traffic_log:
              self.traffic_log(self.name, pdu)
  
          # randomly drop a packet
          if self.drop_percent != 0.0:
              if (random.random() * 100.0) < self.drop_percent:
                  if _debug: Network._debug("    - packet dropped")
                  return
  
          if pdu.pduDestination == self.broadcast_address:
              if _debug: Network._debug("    - broadcast")
              for node in self.nodes:
                  if (pdu.pduSource != node.address):
                      if _debug: Network._debug("    - match: %r", node)
                      node.response(deepcopy(pdu))
          else:
              if _debug: Network._debug("    - unicast")
              for node in self.nodes:
                  if node.promiscuous or (pdu.pduDestination == node.address):
                      if _debug: Network._debug("    - match: %r", node)
                      node.response(deepcopy(pdu))
docs: Process a PDU by sending a copy to each node as dictated by the
              addressing and if a node is promiscuous.