5 COLOR_SCHEME = 'pastel19' # see http://www.graphviz.org/doc/info/colors.html
6 SOURCE_SINK = ["ActiveSocketSource", "PassiveSocketSource", "ActiveSocketSink", "PassiveSocketSink"]
7 NETEMU = ["InterfaceAnnotater" , "PacketMonitor" , "PacketTypeChecker"]
12 node [shape=Mrecord, fontsize=8, fontname="Helvetica"];
20 if opt in ("-p","--packet"):
23 for line in sys.stdin:
27 elif mode == "MODULE":
28 moduleid, module = line.split(' ',1);
29 moduleid = moduleid[1:]
30 connectorid = type = peerid = None
31 modules[moduleid] = (module, []);
34 connectorid, type = line.split(' ',1);
35 connectorid = connectorid[1:]
37 packet = type.rsplit('<',1)[1];
38 packet = packet.rsplit('::',1)[-1];
39 packet = packet.split('>',1)[0];
41 elts = type.rsplit(' ',1);
42 if elts[-1].startswith('0x'):
47 modules[moduleid][1].append((connectorid, type, peerid, packet))
48 connectors[connectorid] = moduleid
50 for moduleid, (module, cs) in modules.iteritems():
51 module = module.split('<',1)[0]
52 if "senf" not in module.split('::',1)[0]:
53 if module.rsplit('::',1)[-1] in NETEMU:
57 elif module.rsplit('::',1)[-1] in SOURCE_SINK:
61 module = module.rsplit('::',1)[-1]
64 for connectorid, type, peerid,packet in cs:
65 if 'Input' in type: inputs.append("<%s>%s" % (connectorid,connectorid))
66 else: outputs.append("<%s>%s" % (connectorid,connectorid))
68 if inputs: rows.append("{%s}" % "|".join(inputs))
69 rows.append("%s (%s)" % (module, moduleid))
70 if outputs: rows.append("{%s}" % "|".join(outputs))
71 sys.stdout.write('%s [label="{%s}" style="filled" fillcolor="/%s/%s" ]\n'
72 % (moduleid, "|".join(rows),COLOR_SCHEME, color ))
76 for moduleid, (type, cs) in modules.iteritems():
77 for connectorid, type, peerid, packet in cs:
79 if "Passive" in type: opts.append("arrowtail=odot");
81 if opts: opts = " [%s]" % opts
82 if "Output" in type and peerid is not None:
83 if "Packet" in packet and p is 1:
84 sys.stdout.write('%s:%s -> %s:%s%s [label=" %s", fontsize=8, fontname="Helvetica"]\n'
85 % (moduleid, connectorid, connectors[peerid], peerid, opts,packet))
87 sys.stdout.write('%s:%s -> %s:%s%s\n'
88 % (moduleid, connectorid, connectors[peerid], peerid, opts))
90 sys.stdout.write('anon%d [label="", shape=point, height=.05];\n' % anonid)
92 sys.stdout.write('%s:%s -> anon%d%s;\n' % (moduleid, connectorid, anonid, opts))
94 sys.stdout.write('anon%d -> %s:%s%s;\n' % (anonid, moduleid, connectorid, opts))
97 sys.stdout.write("}\n")