+class IpifProcessProtocol(twisted.internet.protocol.ProcessProtocol):
+ def __init__(self):
+ self._buffer = b''
+ def connectionMade(self): pass
+ def outReceived(self, data):
+ buffer += data
+ packets = slip_decode(buffer)
+ buffer = packets.pop()
+ for packet in packets:
+ (saddr, daddr) = packet_addrs(packet)
+ route(packet, daddr)
+
+def start_ipif():
+ reactor.spawnProcess(IpifProcessProtocol(),
+ '/bin/sh',['-c', ipif_command],
+ childFDs={0:'w', 1:'r', 2:2})
+
+def log_discard(packet, saddr, daddr, why):
+ syslog.syslog(syslog.LOG_DEBUG,
+ 'discarded packet %s -> %s (%s)' % (saddr, daddr, why))
+