Last active
May 9, 2023 04:20
-
-
Save maciejskorski/65e877d738d1e9d6adcda631973aa7e5 to your computer and use it in GitHub Desktop.
abstractsyntaxtree_demo.ipynb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "view-in-github", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"<a href=\"https://colab.research.google.com/gist/maciejskorski/65e877d738d1e9d6adcda631973aa7e5/abstractsyntaxtree_demo.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"![Colab](https://img.shields.io/badge/Google-Colab-F9AB00?style=plain&logo=googlecolab&color=525252)\n", | |
"[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n", | |
"\n", | |
"# Summary\n", | |
"\n", | |
"This notebook demonstrates how to create and visualize an [Abstract Syntax Tree](https://en.wikipedia.org/wiki/Abstract_syntax_tree) of programming code, using `libclang` for parsing and `graphivz` for visualization. \n", | |
"\n", | |
"The example provided runs on the [tcpdump](https://github.com/the-tcpdump-group/tcpdump) project written in [C99](https://en.wikipedia.org/wiki/C99). The task is to visualize functions and their arguments, including types and declaration locations. Enjoy!" | |
], | |
"metadata": { | |
"id": "garWdMr_BQ7v" | |
} | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"## Prerequisites" | |
], | |
"metadata": { | |
"id": "CFhWOcNeDl3f" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": { | |
"id": "BG7Mwk4mJS-e" | |
}, | |
"outputs": [], | |
"source": [ | |
"!pip install libclang graphviz --quiet\n", | |
"!git clone https://github.com/the-tcpdump-group/tcpdump.git --quiet" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"## Parser" | |
], | |
"metadata": { | |
"id": "VwWug60NDqbZ" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"import clang\n", | |
"from clang.cindex import Index, Config, CursorKind, TypeKind\n", | |
"\n", | |
"SCRIPT_PATH = \"./tcpdump/print-ppp.c\"\n", | |
"\n", | |
"# C99 is a proper compiler for tcpdump, as per docs\n", | |
"index = Index.create()\n", | |
"translation_unit = index.parse(SCRIPT_PATH, args=[\"-std=c99\"])\n", | |
"\n", | |
"# filter to nodes in the root script (ignore imported!)\n", | |
"script_node = translation_unit.cursor\n", | |
"all_nodes = script_node.get_children()\n", | |
"all_nodes = filter(lambda c: c.location.file.name == SCRIPT_PATH, all_nodes)\n", | |
"\n", | |
"# filter to function nodes\n", | |
"func_nodes = filter(lambda c: c.kind == clang.cindex.CursorKind.FUNCTION_DECL, all_nodes)" | |
], | |
"metadata": { | |
"id": "aOsQ7c_WrYqZ", | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"outputId": "656ea821-4b65-481b-9a26-ac4e9b95914a" | |
}, | |
"execution_count": 10, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"[<clang.cindex.Cursor at 0x7fb11e2460c0>,\n", | |
" <clang.cindex.Cursor at 0x7fb11e246140>,\n", | |
" <clang.cindex.Cursor at 0x7fb11e2461c0>,\n", | |
" <clang.cindex.Cursor at 0x7fb11e246240>,\n", | |
" <clang.cindex.Cursor at 0x7fb11e2462c0>,\n", | |
" <clang.cindex.Cursor at 0x7fb11e246340>,\n", | |
" <clang.cindex.Cursor at 0x7fb11e2463c0>,\n", | |
" <clang.cindex.Cursor at 0x7fb11e246440>,\n", | |
" <clang.cindex.Cursor at 0x7fb11e246540>,\n", | |
" <clang.cindex.Cursor at 0x7fb11e2465c0>,\n", | |
" <clang.cindex.Cursor at 0x7fb11e246640>,\n", | |
" <clang.cindex.Cursor at 0x7fb11e2466c0>,\n", | |
" <clang.cindex.Cursor at 0x7fb11e246740>,\n", | |
" <clang.cindex.Cursor at 0x7fb11e2467c0>,\n", | |
" <clang.cindex.Cursor at 0x7fb11e246840>,\n", | |
" <clang.cindex.Cursor at 0x7fb11e2468c0>,\n", | |
" <clang.cindex.Cursor at 0x7fb11e246940>,\n", | |
" <clang.cindex.Cursor at 0x7fb11e2469c0>,\n", | |
" <clang.cindex.Cursor at 0x7fb11e246a40>,\n", | |
" <clang.cindex.Cursor at 0x7fb11e246ac0>,\n", | |
" <clang.cindex.Cursor at 0x7fb11e246b40>,\n", | |
" <clang.cindex.Cursor at 0x7fb11e246bc0>]" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 10 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"import re\n", | |
"\n", | |
"rgx = r'(commit\\s[0-9,a-f]{40})(.*?)(?=commit\\s[0-9,a-f]{40}|\\Z)'\n", | |
"\n", | |
"text = '''commit 8e018dbcdbff15c3fc9ef4460b4214f47f71ddf6\n", | |
"Author: ISAAC.NEWTON <ISAAC.NEWTON@GOOGLE.COM>\n", | |
"Date: Fri Apr 28 18:58:00 2023 +0800\n", | |
"\n", | |
" new cat\n", | |
"\n", | |
"commit 9274b33435238122c8d6d389e73266f6a3e68745\n", | |
"Author: ISAAC.NEWTON <ISAAC.NEWTON@GOOGLE.COM>\n", | |
"Date: Wed Apr 19 11:04:04 2023 +0800\n", | |
"\n", | |
" meow\n", | |
"\n", | |
"commit 4f113912741f753c75a44f18790ff5903e910fad\n", | |
"Author: ISAAC.NEWTON <ISAAC.NEWTON@GOOGLE.COM>\n", | |
"Date: Fri Apr 14 17:55:55 2023 +0800\n", | |
"\n", | |
" Add test files\n", | |
"\n", | |
"commit 87053deb6ad07fa1ea6dd7a5acfee075ce5b6322\n", | |
"Author: ISAAC.NEWTON <ISAAC.NEWTON@GOOGLE.COM>\n", | |
"Date: Fri Apr 14 15:16:57 2023 +0800\n", | |
"\n", | |
" Add cat.jpg\n", | |
"'''\n", | |
"\n", | |
"re.findall(rgx, text, re.DOTALL)" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "Zj-L3p7QgG0a", | |
"outputId": "c07a4317-0c55-44d4-a2c3-65c6c7599281" | |
}, | |
"execution_count": 130, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"[('commit 8e018dbcdbff15c3fc9ef4460b4214f47f71ddf6',\n", | |
" '\\nAuthor: ISAAC.NEWTON <ISAAC.NEWTON@GOOGLE.COM>\\nDate: Fri Apr 28 18:58:00 2023 +0800\\n\\n new cat\\n\\n'),\n", | |
" ('commit 9274b33435238122c8d6d389e73266f6a3e68745',\n", | |
" '\\nAuthor: ISAAC.NEWTON <ISAAC.NEWTON@GOOGLE.COM>\\nDate: Wed Apr 19 11:04:04 2023 +0800\\n\\n meow\\n\\n'),\n", | |
" ('commit 4f113912741f753c75a44f18790ff5903e910fad',\n", | |
" '\\nAuthor: ISAAC.NEWTON <ISAAC.NEWTON@GOOGLE.COM>\\nDate: Fri Apr 14 17:55:55 2023 +0800\\n\\n Add test files\\n\\n'),\n", | |
" ('commit 87053deb6ad07fa1ea6dd7a5acfee075ce5b6322',\n", | |
" '\\nAuthor: ISAAC.NEWTON <ISAAC.NEWTON@GOOGLE.COM>\\nDate: Fri Apr 14 15:16:57 2023 +0800\\n\\n Add cat.jpg\\n')]" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 130 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"txt = '8e018dbcdbff15c3fc9ef4460b4214f47f71ddf6'\n", | |
"rgx = '[0-9,a-e]{1,}'\n" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "DbTG0Qm1pSMK", | |
"outputId": "e525cf7d-0bdc-4759-a343-d95951f2646c" | |
}, | |
"execution_count": 100, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"<re.Match object; span=(0, 10), match='8e018dbcdb'>" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 100 | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"## Visualization" | |
], | |
"metadata": { | |
"id": "Z--d6MBIDyKy" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"from graphviz import Digraph\n", | |
"\n", | |
"dot = Digraph(strict=True)\n", | |
"dot.attr(rankdir=\"LR\", size=\"20,100\", fontsize=\"6\")\n", | |
"\n", | |
"node_args = {\"fontsize\": \"8pt\", \"edgefontsize\": \"6pt\"}\n", | |
"\n", | |
"for fn in func_nodes:\n", | |
" fn_node_name = f\"{fn.spelling}\\nL{fn.location.line}\"\n", | |
" dot.node(fn_node_name, **node_args)\n", | |
" for i, arg in enumerate(fn.get_arguments(), start=1):\n", | |
" arg_node_name = arg.type.get_canonical().spelling\n", | |
" dot.node(arg_node_name, **node_args)\n", | |
" dot.edge(fn_node_name, arg_node_name)\n", | |
" t = arg.type\n", | |
" # handle pointers by describing their pointees\n", | |
" if t.kind == TypeKind.POINTER:\n", | |
" declr = t.get_pointee().get_declaration()\n", | |
" else:\n", | |
" declr = t.get_declaration()\n", | |
" declr_file = f\"{declr.location.file}\"\n", | |
" dot.node(declr_file, **node_args)\n", | |
" dot.edge(\n", | |
" arg_node_name, declr_file, label=f\"L{declr.location.line}\", fontsize=\"6pt\"\n", | |
" )\n", | |
"\n", | |
"from IPython.display import display_svg\n", | |
"display_svg(dot)" | |
], | |
"metadata": { | |
"id": "Hp6c0T1dzAXl", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 1000 | |
}, | |
"outputId": "3d53f58d-b4ab-43df-8d3f-0126c52e3f17" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"image/svg+xml": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Generated by graphviz version 2.43.0 (0)\n -->\n<!-- Title: %3 Pages: 1 -->\n<svg width=\"526pt\" height=\"1626pt\"\n viewBox=\"0.00 0.00 526.28 1625.92\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 1621.92)\">\n<title>%3</title>\n<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-1621.92 522.28,-1621.92 522.28,4 -4,4\"/>\n<!-- print_lcp_config_options\nL403 -->\n<g id=\"node1\" class=\"node\">\n<title>print_lcp_config_options\nL403</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"72.83\" cy=\"-1298.38\" rx=\"67.35\" ry=\"18.27\"/>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-1300.98\" font-family=\"Times,serif\" font-size=\"8.00\">print_lcp_config_options</text>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-1291.98\" font-family=\"Times,serif\" font-size=\"8.00\">L403</text>\n</g>\n<!-- struct netdissect_options * -->\n<g id=\"node2\" class=\"node\">\n<title>struct netdissect_options *</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"239.95\" cy=\"-335.38\" rx=\"57.08\" ry=\"18\"/>\n<text text-anchor=\"middle\" x=\"239.95\" y=\"-333.48\" font-family=\"Times,serif\" font-size=\"8.00\">struct netdissect_options *</text>\n</g>\n<!-- print_lcp_config_options\nL403->struct netdissect_options * -->\n<g id=\"edge1\" class=\"edge\">\n<title>print_lcp_config_options\nL403->struct netdissect_options *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M125.77,-1286.77C133.57,-1282.81 140.66,-1277.5 145.66,-1270.38 168.28,-1238.19 156.9,-601.14 163.66,-562.38 176.65,-487.98 209.2,-404.69 226.95,-362.72\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"230.2,-364.02 230.92,-353.45 223.77,-361.26 230.2,-364.02\"/>\n</g>\n<!-- const unsigned char * -->\n<g id=\"node4\" class=\"node\">\n<title>const unsigned char *</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"239.95\" cy=\"-873.38\" rx=\"48.56\" ry=\"18\"/>\n<text text-anchor=\"middle\" x=\"239.95\" y=\"-871.48\" font-family=\"Times,serif\" font-size=\"8.00\">const unsigned char *</text>\n</g>\n<!-- print_lcp_config_options\nL403->const unsigned char * -->\n<g id=\"edge3\" class=\"edge\">\n<title>print_lcp_config_options\nL403->const unsigned char *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M124.98,-1286.64C132.97,-1282.7 140.33,-1277.42 145.66,-1270.38 170.35,-1237.82 154.82,-1127.28 163.66,-1087.38 178.99,-1018.26 209.92,-940.69 226.98,-900.63\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"230.26,-901.84 231,-891.27 223.83,-899.08 230.26,-901.84\"/>\n</g>\n<!-- unsigned int -->\n<g id=\"node6\" class=\"node\">\n<title>unsigned int</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"239.95\" cy=\"-1360.38\" rx=\"31.4\" ry=\"18\"/>\n<text text-anchor=\"middle\" x=\"239.95\" y=\"-1358.48\" font-family=\"Times,serif\" font-size=\"8.00\">unsigned int</text>\n</g>\n<!-- print_lcp_config_options\nL403->unsigned int -->\n<g id=\"edge5\" class=\"edge\">\n<title>print_lcp_config_options\nL403->unsigned int</title>\n<path fill=\"none\" stroke=\"black\" d=\"M125.05,-1310.08C133.03,-1314.03 140.37,-1319.31 145.66,-1326.38 173.47,-1363.52 129.47,-1503.02 163.66,-1534.38 211.96,-1578.68 230.68,-1448.82 236.61,-1388.91\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"240.13,-1388.88 237.57,-1378.6 233.16,-1388.23 240.13,-1388.88\"/>\n</g>\n<!-- ./tcpdump/netdissect.h -->\n<g id=\"node3\" class=\"node\">\n<title>./tcpdump/netdissect.h</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"433.76\" cy=\"-335.38\" rx=\"49.83\" ry=\"18\"/>\n<text text-anchor=\"middle\" x=\"433.76\" y=\"-333.48\" font-family=\"Times,serif\" font-size=\"8.00\">./tcpdump/netdissect.h</text>\n</g>\n<!-- struct netdissect_options *->./tcpdump/netdissect.h -->\n<g id=\"edge2\" class=\"edge\">\n<title>struct netdissect_options *->./tcpdump/netdissect.h</title>\n<path fill=\"none\" stroke=\"black\" d=\"M297.47,-335.38C321.44,-335.38 349.4,-335.38 373.66,-335.38\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"373.8,-338.88 383.8,-335.38 373.8,-331.88 373.8,-338.88\"/>\n<text text-anchor=\"middle\" x=\"323.24\" y=\"-337.58\" font-family=\"Times,serif\" font-size=\"6.00\">L161</text>\n</g>\n<!-- /usr/include/x86_64-linux-gnu/sys/types.h -->\n<g id=\"node5\" class=\"node\">\n<title>/usr/include/x86_64-linux-gnu/sys/types.h</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"433.76\" cy=\"-1110.38\" rx=\"84.53\" ry=\"18\"/>\n<text text-anchor=\"middle\" x=\"433.76\" y=\"-1108.48\" font-family=\"Times,serif\" font-size=\"8.00\">/usr/include/x86_64-linux-gnu/sys/types.h</text>\n</g>\n<!-- const unsigned char *->/usr/include/x86_64-linux-gnu/sys/types.h -->\n<g id=\"edge4\" class=\"edge\">\n<title>const unsigned char *->/usr/include/x86_64-linux-gnu/sys/types.h</title>\n<path fill=\"none\" stroke=\"black\" d=\"M255.06,-890.81C288.51,-932.14 372.77,-1036.26 412.03,-1084.77\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"409.36,-1087.04 418.38,-1092.61 414.81,-1082.63 409.36,-1087.04\"/>\n<text text-anchor=\"middle\" x=\"323.24\" y=\"-986.58\" font-family=\"Times,serif\" font-size=\"6.00\">L33</text>\n</g>\n<!-- unsigned int->/usr/include/x86_64-linux-gnu/sys/types.h -->\n<g id=\"edge6\" class=\"edge\">\n<title>unsigned int->/usr/include/x86_64-linux-gnu/sys/types.h</title>\n<path fill=\"none\" stroke=\"black\" d=\"M253.54,-1343.98C286.14,-1301.48 373.56,-1187.54 412.99,-1136.15\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"415.8,-1138.24 419.11,-1128.18 410.25,-1133.98 415.8,-1138.24\"/>\n<text text-anchor=\"middle\" x=\"323.24\" y=\"-1259.58\" font-family=\"Times,serif\" font-size=\"6.00\">L35</text>\n</g>\n<!-- print_ipcp_config_options\nL404 -->\n<g id=\"node7\" class=\"node\">\n<title>print_ipcp_config_options\nL404</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"72.83\" cy=\"-1243.38\" rx=\"70.01\" ry=\"18.27\"/>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-1245.98\" font-family=\"Times,serif\" font-size=\"8.00\">print_ipcp_config_options</text>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-1236.98\" font-family=\"Times,serif\" font-size=\"8.00\">L404</text>\n</g>\n<!-- print_ipcp_config_options\nL404->struct netdissect_options * -->\n<g id=\"edge7\" class=\"edge\">\n<title>print_ipcp_config_options\nL404->struct netdissect_options *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M126.48,-1231.4C134,-1227.48 140.81,-1222.28 145.66,-1215.38 167.34,-1184.56 156.49,-574.37 163.66,-537.38 176.29,-472.29 207.5,-400.55 225.53,-362.53\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"228.84,-363.71 230.02,-353.18 222.53,-360.68 228.84,-363.71\"/>\n</g>\n<!-- print_ipcp_config_options\nL404->const unsigned char * -->\n<g id=\"edge8\" class=\"edge\">\n<title>print_ipcp_config_options\nL404->const unsigned char *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M125.6,-1231.2C133.32,-1227.3 140.42,-1222.16 145.66,-1215.38 166.6,-1188.3 155.26,-1095.57 163.66,-1062.38 178.81,-1002.61 208.31,-936.46 225.55,-900.44\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"228.86,-901.63 230.06,-891.1 222.56,-898.58 228.86,-901.63\"/>\n</g>\n<!-- print_ipcp_config_options\nL404->unsigned int -->\n<g id=\"edge9\" class=\"edge\">\n<title>print_ipcp_config_options\nL404->unsigned int</title>\n<path fill=\"none\" stroke=\"black\" d=\"M126.2,-1255.58C133.75,-1259.47 140.65,-1264.61 145.66,-1271.38 177.22,-1314.01 124.77,-1473.32 163.66,-1509.38 205.02,-1547.73 227.01,-1441.69 235.17,-1388.61\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"238.68,-1388.86 236.67,-1378.46 231.75,-1387.84 238.68,-1388.86\"/>\n</g>\n<!-- print_ip6cp_config_options\nL405 -->\n<g id=\"node8\" class=\"node\">\n<title>print_ip6cp_config_options\nL405</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"72.83\" cy=\"-473.38\" rx=\"72.66\" ry=\"18.27\"/>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-475.98\" font-family=\"Times,serif\" font-size=\"8.00\">print_ip6cp_config_options</text>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-466.98\" font-family=\"Times,serif\" font-size=\"8.00\">L405</text>\n</g>\n<!-- print_ip6cp_config_options\nL405->struct netdissect_options * -->\n<g id=\"edge10\" class=\"edge\">\n<title>print_ip6cp_config_options\nL405->struct netdissect_options *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M126.95,-460.84C134.21,-456.99 140.82,-451.96 145.66,-445.38 179.73,-399.09 121.63,-226.58 163.66,-187.38 204.69,-149.12 226.85,-254.54 235.12,-307.32\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"231.69,-308.04 236.63,-317.41 238.61,-307 231.69,-308.04\"/>\n</g>\n<!-- print_ip6cp_config_options\nL405->const unsigned char * -->\n<g id=\"edge11\" class=\"edge\">\n<title>print_ip6cp_config_options\nL405->const unsigned char *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M126.43,-485.86C133.85,-489.72 140.65,-494.77 145.66,-501.38 170.35,-533.95 154.01,-644.68 163.66,-684.38 178.24,-744.3 207.95,-810.4 225.37,-846.38\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"222.4,-848.26 229.94,-855.7 228.68,-845.18 222.4,-848.26\"/>\n</g>\n<!-- print_ip6cp_config_options\nL405->unsigned int -->\n<g id=\"edge12\" class=\"edge\">\n<title>print_ip6cp_config_options\nL405->unsigned int</title>\n<path fill=\"none\" stroke=\"black\" d=\"M127.19,-485.75C134.43,-489.62 140.97,-494.71 145.66,-501.38 166.71,-531.29 156.65,-1123.49 163.66,-1159.38 176.38,-1224.52 207.84,-1296.3 225.81,-1333.96\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"222.78,-1335.73 230.28,-1343.21 229.08,-1332.68 222.78,-1335.73\"/>\n</g>\n<!-- print_ccp_config_options\nL406 -->\n<g id=\"node9\" class=\"node\">\n<title>print_ccp_config_options\nL406</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"72.83\" cy=\"-1023.38\" rx=\"68.68\" ry=\"18.27\"/>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-1025.98\" font-family=\"Times,serif\" font-size=\"8.00\">print_ccp_config_options</text>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-1016.98\" font-family=\"Times,serif\" font-size=\"8.00\">L406</text>\n</g>\n<!-- print_ccp_config_options\nL406->struct netdissect_options * -->\n<g id=\"edge13\" class=\"edge\">\n<title>print_ccp_config_options\nL406->struct netdissect_options *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M126.09,-1011.56C133.75,-1007.62 140.72,-1002.38 145.66,-995.38 181.49,-944.74 143.32,-495.99 163.66,-437.38 174,-407.6 196.35,-379.2 214.03,-359.98\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"216.7,-362.24 221.02,-352.57 211.61,-357.43 216.7,-362.24\"/>\n</g>\n<!-- print_ccp_config_options\nL406->const unsigned char * -->\n<g id=\"edge14\" class=\"edge\">\n<title>print_ccp_config_options\nL406->const unsigned char *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M121.35,-1010.32C130.07,-1006.47 138.63,-1001.57 145.66,-995.38 158.21,-984.35 154.22,-976.17 163.66,-962.38 179.54,-939.22 200.32,-915.02 216.03,-897.71\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"218.67,-900.01 222.85,-890.28 213.51,-895.28 218.67,-900.01\"/>\n</g>\n<!-- print_ccp_config_options\nL406->unsigned int -->\n<g id=\"edge15\" class=\"edge\">\n<title>print_ccp_config_options\nL406->unsigned int</title>\n<path fill=\"none\" stroke=\"black\" d=\"M125.99,-1035.28C133.66,-1039.21 140.65,-1044.44 145.66,-1051.38 168.96,-1083.69 134.8,-1381.94 163.66,-1409.38 181.24,-1426.1 205.26,-1404.41 221.4,-1384.81\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"224.16,-1386.96 227.58,-1376.94 218.66,-1382.64 224.16,-1386.96\"/>\n</g>\n<!-- print_bacp_config_options\nL407 -->\n<g id=\"node10\" class=\"node\">\n<title>print_bacp_config_options\nL407</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"72.83\" cy=\"-968.38\" rx=\"71.34\" ry=\"18.27\"/>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-970.98\" font-family=\"Times,serif\" font-size=\"8.00\">print_bacp_config_options</text>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-961.98\" font-family=\"Times,serif\" font-size=\"8.00\">L407</text>\n</g>\n<!-- print_bacp_config_options\nL407->struct netdissect_options * -->\n<g id=\"edge16\" class=\"edge\">\n<title>print_bacp_config_options\nL407->struct netdissect_options *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M126.8,-956.18C134.18,-952.29 140.87,-947.16 145.66,-940.38 179.61,-892.49 140.58,-466.36 163.66,-412.38 172.8,-391.01 190.82,-372.24 206.94,-358.58\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"209.59,-360.94 215.14,-351.92 205.17,-355.51 209.59,-360.94\"/>\n</g>\n<!-- print_bacp_config_options\nL407->const unsigned char * -->\n<g id=\"edge17\" class=\"edge\">\n<title>print_bacp_config_options\nL407->const unsigned char *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M116.79,-953.67C126.5,-949.79 136.61,-945.3 145.66,-940.38 168.86,-927.8 193,-910.32 210.92,-896.37\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"213.5,-898.79 219.18,-889.84 209.16,-893.29 213.5,-898.79\"/>\n</g>\n<!-- print_bacp_config_options\nL407->unsigned int -->\n<g id=\"edge18\" class=\"edge\">\n<title>print_bacp_config_options\nL407->unsigned int</title>\n<path fill=\"none\" stroke=\"black\" d=\"M126.73,-980.64C134.11,-984.53 140.82,-989.64 145.66,-996.38 170.84,-1031.44 132.45,-1354.58 163.66,-1384.38 176.89,-1397.01 196.76,-1389.98 212.77,-1380.34\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"214.74,-1383.23 221.19,-1374.82 210.91,-1377.37 214.74,-1383.23\"/>\n</g>\n<!-- handle_ppp\nL408 -->\n<g id=\"node11\" class=\"node\">\n<title>handle_ppp\nL408</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"72.83\" cy=\"-748.38\" rx=\"37.45\" ry=\"18.27\"/>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-750.98\" font-family=\"Times,serif\" font-size=\"8.00\">handle_ppp</text>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-741.98\" font-family=\"Times,serif\" font-size=\"8.00\">L408</text>\n</g>\n<!-- handle_ppp\nL408->struct netdissect_options * -->\n<g id=\"edge19\" class=\"edge\">\n<title>handle_ppp\nL408->struct netdissect_options *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M108.91,-743.13C122.62,-739.21 137.09,-732.35 145.66,-720.38 172.09,-683.5 130.88,-343.76 163.66,-312.38 175.6,-300.96 193.06,-305.46 208.16,-313.39\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"206.78,-316.64 217.18,-318.65 210.31,-310.59 206.78,-316.64\"/>\n</g>\n<!-- handle_ppp\nL408->const unsigned char * -->\n<g id=\"edge21\" class=\"edge\">\n<title>handle_ppp\nL408->const unsigned char *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M107.22,-756.06C120.33,-760.36 134.81,-766.84 145.66,-776.38 158.21,-787.42 153.12,-796.42 163.66,-809.38 176.42,-825.07 193.39,-839.88 207.99,-851.29\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"206.19,-854.32 216.26,-857.6 210.44,-848.76 206.19,-854.32\"/>\n</g>\n<!-- handle_ppp\nL408->unsigned int -->\n<g id=\"edge20\" class=\"edge\">\n<title>handle_ppp\nL408->unsigned int</title>\n<path fill=\"none\" stroke=\"black\" d=\"M108.96,-753.6C122.68,-757.52 137.14,-764.38 145.66,-776.38 178.36,-822.44 141.25,-1232.54 163.66,-1284.38 173.54,-1307.24 193.72,-1327 210.71,-1340.64\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"208.67,-1343.49 218.73,-1346.83 212.95,-1337.95 208.67,-1343.49\"/>\n</g>\n<!-- handle_ctrl_proto\nL412 -->\n<g id=\"node12\" class=\"node\">\n<title>handle_ctrl_proto\nL412</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"72.83\" cy=\"-1598.38\" rx=\"51.74\" ry=\"18.27\"/>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-1600.98\" font-family=\"Times,serif\" font-size=\"8.00\">handle_ctrl_proto</text>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-1591.98\" font-family=\"Times,serif\" font-size=\"8.00\">L412</text>\n</g>\n<!-- handle_ctrl_proto\nL412->struct netdissect_options * -->\n<g id=\"edge22\" class=\"edge\">\n<title>handle_ctrl_proto\nL412->struct netdissect_options *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M81.57,-1580.14C96.84,-1543.21 130.67,-1456.63 145.66,-1380.38 191.56,-1146.95 161.51,-1083.35 182.66,-846.38 199.11,-662.09 225.83,-441.19 235.4,-363.81\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"238.93,-363.82 236.69,-353.46 231.98,-362.95 238.93,-363.82\"/>\n</g>\n<!-- handle_ctrl_proto\nL412->const unsigned char * -->\n<g id=\"edge24\" class=\"edge\">\n<title>handle_ctrl_proto\nL412->const unsigned char *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M80.85,-1579.97C94.82,-1542.75 126.43,-1455.67 145.66,-1380.38 191.68,-1200.26 224.44,-978.63 235.16,-901.45\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"238.63,-901.92 236.53,-891.54 231.7,-900.97 238.63,-901.92\"/>\n</g>\n<!-- handle_ctrl_proto\nL412->unsigned int -->\n<g id=\"edge23\" class=\"edge\">\n<title>handle_ctrl_proto\nL412->unsigned int</title>\n<path fill=\"none\" stroke=\"black\" d=\"M105.72,-1612.58C124.58,-1618.65 147.98,-1621.82 164.66,-1609.38 200.51,-1582.68 225.37,-1448.11 234.78,-1388.68\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"238.29,-1388.92 236.36,-1378.5 231.37,-1387.84 238.29,-1388.92\"/>\n</g>\n<!-- print_lcp_config_options\nL590 -->\n<g id=\"node13\" class=\"node\">\n<title>print_lcp_config_options\nL590</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"72.83\" cy=\"-858.38\" rx=\"67.35\" ry=\"18.27\"/>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-860.98\" font-family=\"Times,serif\" font-size=\"8.00\">print_lcp_config_options</text>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-851.98\" font-family=\"Times,serif\" font-size=\"8.00\">L590</text>\n</g>\n<!-- print_lcp_config_options\nL590->struct netdissect_options * -->\n<g id=\"edge25\" class=\"edge\">\n<title>print_lcp_config_options\nL590->struct netdissect_options *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M125.33,-846.9C133.28,-842.93 140.54,-837.58 145.66,-830.38 175.85,-787.99 132.9,-404.36 163.66,-362.38 168.01,-356.46 173.78,-351.82 180.19,-348.21\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"181.75,-351.34 189.27,-343.88 178.74,-345.02 181.75,-351.34\"/>\n</g>\n<!-- print_lcp_config_options\nL590->const unsigned char * -->\n<g id=\"edge26\" class=\"edge\">\n<title>print_lcp_config_options\nL590->const unsigned char *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M136.73,-864.1C151.76,-865.46 167.72,-866.91 182.44,-868.25\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"182.14,-871.74 192.41,-869.16 182.77,-864.77 182.14,-871.74\"/>\n</g>\n<!-- print_lcp_config_options\nL590->unsigned int -->\n<g id=\"edge27\" class=\"edge\">\n<title>print_lcp_config_options\nL590->unsigned int</title>\n<path fill=\"none\" stroke=\"black\" d=\"M125.32,-869.88C133.27,-873.85 140.53,-879.19 145.66,-886.38 174.6,-926.94 133.94,-1294.4 163.66,-1334.38 172.01,-1345.62 185.53,-1352.03 198.82,-1355.68\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"198.32,-1359.16 208.85,-1357.97 199.88,-1352.33 198.32,-1359.16\"/>\n</g>\n<!-- handle_mlppp\nL804 -->\n<g id=\"node14\" class=\"node\">\n<title>handle_mlppp\nL804</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"72.83\" cy=\"-1078.38\" rx=\"43.27\" ry=\"18.27\"/>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-1080.98\" font-family=\"Times,serif\" font-size=\"8.00\">handle_mlppp</text>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-1071.98\" font-family=\"Times,serif\" font-size=\"8.00\">L804</text>\n</g>\n<!-- handle_mlppp\nL804->struct netdissect_options * -->\n<g id=\"edge28\" class=\"edge\">\n<title>handle_mlppp\nL804->struct netdissect_options *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M113.5,-1071.8C125.8,-1067.71 138.1,-1061.1 145.66,-1050.38 183.37,-996.99 145.42,-525.15 163.66,-462.38 174.8,-424.07 200.23,-385.4 218.45,-360.97\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"221.29,-363.02 224.56,-352.95 215.72,-358.78 221.29,-363.02\"/>\n</g>\n<!-- handle_mlppp\nL804->const unsigned char * -->\n<g id=\"edge29\" class=\"edge\">\n<title>handle_mlppp\nL804->const unsigned char *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M112.05,-1070.64C124.24,-1066.46 136.83,-1060.08 145.66,-1050.38 165.27,-1028.85 151.5,-1013.84 163.66,-987.38 178.62,-954.85 202.12,-921.05 218.88,-898.78\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"221.88,-900.63 225.17,-890.56 216.32,-896.38 221.88,-900.63\"/>\n</g>\n<!-- handle_mlppp\nL804->unsigned int -->\n<g id=\"edge30\" class=\"edge\">\n<title>handle_mlppp\nL804->unsigned int</title>\n<path fill=\"none\" stroke=\"black\" d=\"M113.35,-1085.08C125.64,-1089.17 137.97,-1095.76 145.66,-1106.38 167.08,-1135.94 137.16,-1409.29 163.66,-1434.38 186.27,-1455.78 212.01,-1416.23 226.78,-1387.18\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"230.1,-1388.35 231.35,-1377.83 223.82,-1385.28 230.1,-1388.35\"/>\n</g>\n<!-- handle_chap\nL828 -->\n<g id=\"node15\" class=\"node\">\n<title>handle_chap\nL828</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"72.83\" cy=\"-803.38\" rx=\"39.7\" ry=\"18.27\"/>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-805.98\" font-family=\"Times,serif\" font-size=\"8.00\">handle_chap</text>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-796.98\" font-family=\"Times,serif\" font-size=\"8.00\">L828</text>\n</g>\n<!-- handle_chap\nL828->struct netdissect_options * -->\n<g id=\"edge31\" class=\"edge\">\n<title>handle_chap\nL828->struct netdissect_options *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M110.8,-797.59C123.95,-793.59 137.5,-786.82 145.66,-775.38 173.97,-735.75 128.97,-371.58 163.66,-337.38 168.14,-332.97 173.59,-330.15 179.48,-328.47\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"180.51,-331.84 189.74,-326.65 179.28,-324.95 180.51,-331.84\"/>\n</g>\n<!-- handle_chap\nL828->const unsigned char * -->\n<g id=\"edge32\" class=\"edge\">\n<title>handle_chap\nL828->const unsigned char *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M104.03,-814.76C116.92,-819.72 132.09,-825.69 145.66,-831.38 163.46,-838.85 182.96,-847.55 199.51,-855.09\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"198.33,-858.39 208.88,-859.37 201.24,-852.03 198.33,-858.39\"/>\n</g>\n<!-- handle_chap\nL828->unsigned int -->\n<g id=\"edge33\" class=\"edge\">\n<title>handle_chap\nL828->unsigned int</title>\n<path fill=\"none\" stroke=\"black\" d=\"M110.82,-809.17C123.97,-813.17 137.52,-819.93 145.66,-831.38 176.48,-874.69 137.88,-1262.91 163.66,-1309.38 172.61,-1325.5 189.06,-1337.53 204.3,-1345.84\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"203.06,-1349.14 213.56,-1350.54 206.23,-1342.89 203.06,-1349.14\"/>\n</g>\n<!-- handle_pap\nL899 -->\n<g id=\"node16\" class=\"node\">\n<title>handle_pap\nL899</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"72.83\" cy=\"-528.38\" rx=\"37.45\" ry=\"18.27\"/>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-530.98\" font-family=\"Times,serif\" font-size=\"8.00\">handle_pap</text>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-521.98\" font-family=\"Times,serif\" font-size=\"8.00\">L899</text>\n</g>\n<!-- handle_pap\nL899->struct netdissect_options * -->\n<g id=\"edge34\" class=\"edge\">\n<title>handle_pap\nL899->struct netdissect_options *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M108.8,-523.05C122.5,-519.12 136.98,-512.27 145.66,-500.38 183.48,-448.6 116.93,-256.29 163.66,-212.38 198.03,-180.1 222.58,-261.88 233.16,-307.38\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"229.77,-308.28 235.37,-317.28 236.6,-306.75 229.77,-308.28\"/>\n</g>\n<!-- handle_pap\nL899->const unsigned char * -->\n<g id=\"edge35\" class=\"edge\">\n<title>handle_pap\nL899->const unsigned char *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M108.86,-534.06C122.39,-538.05 136.74,-544.84 145.66,-556.38 166.6,-583.47 154.41,-676.43 163.66,-709.38 177.86,-759.95 205.76,-814.63 223.32,-846.34\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"220.46,-848.41 228.41,-855.41 226.57,-844.98 220.46,-848.41\"/>\n</g>\n<!-- handle_pap\nL899->unsigned int -->\n<g id=\"edge36\" class=\"edge\">\n<title>handle_pap\nL899->unsigned int</title>\n<path fill=\"none\" stroke=\"black\" d=\"M109,-533.58C122.73,-537.49 137.18,-544.35 145.66,-556.38 165.77,-584.92 156.17,-1150.3 163.66,-1184.38 175.94,-1240.22 205.71,-1300.49 223.93,-1334.02\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"221.06,-1336.07 228.95,-1343.13 227.19,-1332.69 221.06,-1336.07\"/>\n</g>\n<!-- handle_bap\nL997 -->\n<g id=\"node17\" class=\"node\">\n<title>handle_bap\nL997</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"72.83\" cy=\"-418.38\" rx=\"37.45\" ry=\"18.27\"/>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-420.98\" font-family=\"Times,serif\" font-size=\"8.00\">handle_bap</text>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-411.98\" font-family=\"Times,serif\" font-size=\"8.00\">L997</text>\n</g>\n<!-- handle_bap\nL997->struct netdissect_options * -->\n<g id=\"edge37\" class=\"edge\">\n<title>handle_bap\nL997->struct netdissect_options *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M73.71,-399.68C74.53,-350.71 84.31,-218.63 163.66,-162.38 216.62,-124.85 232.71,-249.09 237.27,-307.14\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"233.78,-307.43 238,-317.15 240.76,-306.93 233.78,-307.43\"/>\n</g>\n<!-- handle_bap\nL997->const unsigned char * -->\n<g id=\"edge38\" class=\"edge\">\n<title>handle_bap\nL997->const unsigned char *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M108.67,-423.81C122.35,-427.76 136.85,-434.59 145.66,-446.38 174.1,-484.44 153.7,-612.94 163.66,-659.38 178.51,-728.61 209.63,-806.14 226.85,-846.17\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"223.72,-847.74 230.91,-855.51 230.14,-844.95 223.72,-847.74\"/>\n</g>\n<!-- handle_bap\nL997->unsigned int -->\n<g id=\"edge39\" class=\"edge\">\n<title>handle_bap\nL997->unsigned int</title>\n<path fill=\"none\" stroke=\"black\" d=\"M108.7,-423.79C122.38,-427.74 136.88,-434.57 145.66,-446.38 160.76,-466.69 161.61,-648.17 163.66,-673.38 171.89,-774.29 172.29,-799.68 182.66,-900.38 199.56,-1064.44 225.49,-1260.69 235.15,-1332.4\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"231.7,-1333 236.51,-1342.44 238.64,-1332.06 231.7,-1333\"/>\n</g>\n<!-- print_ipcp_config_options\nL1006 -->\n<g id=\"node18\" class=\"node\">\n<title>print_ipcp_config_options\nL1006</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"72.83\" cy=\"-1133.38\" rx=\"70.01\" ry=\"18.27\"/>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-1135.98\" font-family=\"Times,serif\" font-size=\"8.00\">print_ipcp_config_options</text>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-1126.98\" font-family=\"Times,serif\" font-size=\"8.00\">L1006</text>\n</g>\n<!-- print_ipcp_config_options\nL1006->struct netdissect_options * -->\n<g id=\"edge40\" class=\"edge\">\n<title>print_ipcp_config_options\nL1006->struct netdissect_options *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M126.47,-1121.39C133.99,-1117.47 140.8,-1112.28 145.66,-1105.38 165.46,-1077.31 155.35,-520.71 163.66,-487.38 175.37,-440.46 203.04,-391.19 221.38,-361.89\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"224.55,-363.42 226.97,-353.11 218.65,-359.66 224.55,-363.42\"/>\n</g>\n<!-- print_ipcp_config_options\nL1006->const unsigned char * -->\n<g id=\"edge41\" class=\"edge\">\n<title>print_ipcp_config_options\nL1006->const unsigned char *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M124.82,-1121.04C132.72,-1117.16 140.09,-1112.07 145.66,-1105.38 172.63,-1073.05 149.47,-1052.02 163.66,-1012.38 178.54,-970.83 204.44,-926.63 221.64,-899.51\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"224.65,-901.3 227.11,-890.99 218.76,-897.51 224.65,-901.3\"/>\n</g>\n<!-- print_ipcp_config_options\nL1006->unsigned int -->\n<g id=\"edge42\" class=\"edge\">\n<title>print_ipcp_config_options\nL1006->unsigned int</title>\n<path fill=\"none\" stroke=\"black\" d=\"M126.29,-1145.51C133.83,-1149.41 140.7,-1154.57 145.66,-1161.38 184.73,-1215 115.36,-1413.91 163.66,-1459.38 192.05,-1486.11 217.84,-1425.91 230.58,-1388.09\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"234.06,-1388.7 233.82,-1378.11 227.4,-1386.54 234.06,-1388.7\"/>\n</g>\n<!-- print_ip6cp_config_options\nL1145 -->\n<g id=\"node19\" class=\"node\">\n<title>print_ip6cp_config_options\nL1145</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"72.83\" cy=\"-1188.38\" rx=\"72.66\" ry=\"18.27\"/>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-1190.98\" font-family=\"Times,serif\" font-size=\"8.00\">print_ip6cp_config_options</text>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-1181.98\" font-family=\"Times,serif\" font-size=\"8.00\">L1145</text>\n</g>\n<!-- print_ip6cp_config_options\nL1145->struct netdissect_options * -->\n<g id=\"edge43\" class=\"edge\">\n<title>print_ip6cp_config_options\nL1145->struct netdissect_options *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M127.19,-1176.02C134.42,-1172.15 140.96,-1167.06 145.66,-1160.38 166.4,-1130.94 155.98,-547.57 163.66,-512.38 175.91,-456.32 205.64,-395.77 223.86,-362.02\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"226.94,-363.68 228.67,-353.23 220.8,-360.32 226.94,-363.68\"/>\n</g>\n<!-- print_ip6cp_config_options\nL1145->const unsigned char * -->\n<g id=\"edge44\" class=\"edge\">\n<title>print_ip6cp_config_options\nL1145->const unsigned char *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M126.16,-1175.7C133.62,-1171.87 140.5,-1166.88 145.66,-1160.38 180.07,-1117.16 147.98,-1090.36 163.66,-1037.38 178.66,-986.75 206.55,-931.69 223.85,-899.99\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"227.08,-901.38 228.86,-890.93 220.96,-897.99 227.08,-901.38\"/>\n</g>\n<!-- print_ip6cp_config_options\nL1145->unsigned int -->\n<g id=\"edge45\" class=\"edge\">\n<title>print_ip6cp_config_options\nL1145->unsigned int</title>\n<path fill=\"none\" stroke=\"black\" d=\"M126.96,-1200.92C134.23,-1204.77 140.83,-1209.8 145.66,-1216.38 180.98,-1264.51 120.07,-1443.62 163.66,-1484.38 198.39,-1516.86 222.85,-1434 233.29,-1388.25\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"236.75,-1388.83 235.48,-1378.31 229.91,-1387.32 236.75,-1388.83\"/>\n</g>\n<!-- print_ccp_config_options\nL1205 -->\n<g id=\"node20\" class=\"node\">\n<title>print_ccp_config_options\nL1205</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"72.83\" cy=\"-638.38\" rx=\"68.68\" ry=\"18.27\"/>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-640.98\" font-family=\"Times,serif\" font-size=\"8.00\">print_ccp_config_options</text>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-631.98\" font-family=\"Times,serif\" font-size=\"8.00\">L1205</text>\n</g>\n<!-- print_ccp_config_options\nL1205->struct netdissect_options * -->\n<g id=\"edge46\" class=\"edge\">\n<title>print_ccp_config_options\nL1205->struct netdissect_options *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M125.98,-626.48C133.65,-622.55 140.65,-617.33 145.66,-610.38 168.33,-578.99 135.59,-289.05 163.66,-262.38 185.84,-241.32 211.34,-279.35 226.25,-307.97\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"223.27,-309.85 230.87,-317.22 229.53,-306.72 223.27,-309.85\"/>\n</g>\n<!-- print_ccp_config_options\nL1205->const unsigned char * -->\n<g id=\"edge47\" class=\"edge\">\n<title>print_ccp_config_options\nL1205->const unsigned char *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M124.45,-650.55C132.49,-654.45 140.01,-659.6 145.66,-666.38 172.63,-698.72 147.76,-720.4 163.66,-759.38 177.17,-792.49 200.88,-826.13 218.09,-848.21\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"215.37,-850.41 224.33,-856.07 220.86,-846.06 215.37,-850.41\"/>\n</g>\n<!-- print_ccp_config_options\nL1205->unsigned int -->\n<g id=\"edge48\" class=\"edge\">\n<title>print_ccp_config_options\nL1205->unsigned int</title>\n<path fill=\"none\" stroke=\"black\" d=\"M126.1,-650.21C133.76,-654.14 140.72,-659.39 145.66,-666.38 182.12,-717.94 145.9,-1173.79 163.66,-1234.38 174.96,-1272.93 200.9,-1311.79 219.16,-1335.95\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"216.61,-1338.38 225.49,-1344.16 222.15,-1334.1 216.61,-1338.38\"/>\n</g>\n<!-- print_bacp_config_options\nL1301 -->\n<g id=\"node21\" class=\"node\">\n<title>print_bacp_config_options\nL1301</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"72.83\" cy=\"-583.38\" rx=\"71.34\" ry=\"18.27\"/>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-585.98\" font-family=\"Times,serif\" font-size=\"8.00\">print_bacp_config_options</text>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-576.98\" font-family=\"Times,serif\" font-size=\"8.00\">L1301</text>\n</g>\n<!-- print_bacp_config_options\nL1301->struct netdissect_options * -->\n<g id=\"edge49\" class=\"edge\">\n<title>print_bacp_config_options\nL1301->struct netdissect_options *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M126.67,-571.09C134.06,-567.21 140.79,-562.1 145.66,-555.38 166.45,-526.74 137.94,-261.69 163.66,-237.38 191.67,-210.92 217.44,-269.83 230.33,-307.35\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"227.15,-308.88 233.61,-317.27 233.79,-306.68 227.15,-308.88\"/>\n</g>\n<!-- print_bacp_config_options\nL1301->const unsigned char * -->\n<g id=\"edge50\" class=\"edge\">\n<title>print_bacp_config_options\nL1301->const unsigned char *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M125.8,-595.88C133.4,-599.74 140.41,-604.79 145.66,-611.38 180.07,-654.61 146.24,-681.96 163.66,-734.38 177.58,-776.27 203.73,-820.38 221.24,-847.4\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"218.4,-849.45 226.82,-855.88 224.25,-845.6 218.4,-849.45\"/>\n</g>\n<!-- print_bacp_config_options\nL1301->unsigned int -->\n<g id=\"edge51\" class=\"edge\">\n<title>print_bacp_config_options\nL1301->unsigned int</title>\n<path fill=\"none\" stroke=\"black\" d=\"M126.82,-595.57C134.2,-599.47 140.88,-604.6 145.66,-611.38 164.83,-638.54 155.56,-1177.15 163.66,-1209.38 175.52,-1256.55 203.67,-1306.05 221.99,-1335.02\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"219.2,-1337.16 227.56,-1343.68 225.09,-1333.37 219.2,-1337.16\"/>\n</g>\n<!-- ppp_hdlc\nL1359 -->\n<g id=\"node22\" class=\"node\">\n<title>ppp_hdlc\nL1359</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"72.83\" cy=\"-1353.38\" rx=\"31.64\" ry=\"18.27\"/>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-1355.98\" font-family=\"Times,serif\" font-size=\"8.00\">ppp_hdlc</text>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-1346.98\" font-family=\"Times,serif\" font-size=\"8.00\">L1359</text>\n</g>\n<!-- ppp_hdlc\nL1359->struct netdissect_options * -->\n<g id=\"edge52\" class=\"edge\">\n<title>ppp_hdlc\nL1359->struct netdissect_options *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M103.91,-1349.27C118.89,-1345.59 135.86,-1338.61 145.66,-1325.38 177.46,-1282.51 177.69,-899.53 182.66,-846.38 199.92,-662.17 226.14,-441.21 235.49,-363.82\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"239.02,-363.81 236.75,-353.47 232.07,-362.97 239.02,-363.81\"/>\n</g>\n<!-- ppp_hdlc\nL1359->const unsigned char * -->\n<g id=\"edge53\" class=\"edge\">\n<title>ppp_hdlc\nL1359->const unsigned char *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M103.61,-1348.66C118.32,-1344.8 135.13,-1337.86 145.66,-1325.38 200.75,-1260.16 228.77,-990.29 236.61,-901.7\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"240.11,-901.85 237.49,-891.59 233.14,-901.25 240.11,-901.85\"/>\n</g>\n<!-- ppp_hdlc\nL1359->unsigned int -->\n<g id=\"edge54\" class=\"edge\">\n<title>ppp_hdlc\nL1359->unsigned int</title>\n<path fill=\"none\" stroke=\"black\" d=\"M75.4,-1371.88C80.09,-1413.93 98.06,-1516.42 163.66,-1559.38 226.03,-1600.23 236.86,-1452.99 238.65,-1388.84\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"242.15,-1388.67 238.87,-1378.59 235.15,-1388.51 242.15,-1388.67\"/>\n</g>\n<!-- handle_ppp\nL1458 -->\n<g id=\"node23\" class=\"node\">\n<title>handle_ppp\nL1458</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"72.83\" cy=\"-913.38\" rx=\"37.45\" ry=\"18.27\"/>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-915.98\" font-family=\"Times,serif\" font-size=\"8.00\">handle_ppp</text>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-906.98\" font-family=\"Times,serif\" font-size=\"8.00\">L1458</text>\n</g>\n<!-- handle_ppp\nL1458->struct netdissect_options * -->\n<g id=\"edge55\" class=\"edge\">\n<title>handle_ppp\nL1458->struct netdissect_options *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M108.95,-908.16C122.68,-904.25 137.14,-897.39 145.66,-885.38 177.73,-840.24 137.06,-435.94 163.66,-387.38 171.04,-373.91 183.59,-363.2 196.35,-355.09\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"198.32,-357.98 205.15,-349.88 194.76,-351.96 198.32,-357.98\"/>\n</g>\n<!-- handle_ppp\nL1458->const unsigned char * -->\n<g id=\"edge57\" class=\"edge\">\n<title>handle_ppp\nL1458->const unsigned char *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M106.85,-905.39C130.3,-899.71 162.21,-891.97 188.8,-885.53\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"189.8,-888.89 198.7,-883.14 188.15,-882.09 189.8,-888.89\"/>\n</g>\n<!-- handle_ppp\nL1458->unsigned int -->\n<g id=\"edge56\" class=\"edge\">\n<title>handle_ppp\nL1458->unsigned int</title>\n<path fill=\"none\" stroke=\"black\" d=\"M108.91,-918.63C122.63,-922.56 137.1,-929.41 145.66,-941.38 172.72,-979.19 130.31,-1327.01 163.66,-1359.38 173.53,-1368.96 188,-1370.84 201.62,-1369.72\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"202.34,-1373.16 211.79,-1368.37 201.41,-1366.22 202.34,-1373.16\"/>\n</g>\n<!-- ppp_print\nL1520 -->\n<g id=\"node24\" class=\"node\">\n<title>ppp_print\nL1520</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"72.83\" cy=\"-693.38\" rx=\"33.47\" ry=\"18.27\"/>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-695.98\" font-family=\"Times,serif\" font-size=\"8.00\">ppp_print</text>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-686.98\" font-family=\"Times,serif\" font-size=\"8.00\">L1520</text>\n</g>\n<!-- ppp_print\nL1520->struct netdissect_options * -->\n<g id=\"edge58\" class=\"edge\">\n<title>ppp_print\nL1520->struct netdissect_options *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M105.17,-689.12C119.92,-685.39 136.29,-678.43 145.66,-665.38 170.21,-631.25 133.23,-316.4 163.66,-287.38 180.65,-271.19 203.87,-290.93 220.02,-309.77\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"217.43,-312.14 226.46,-317.68 222.86,-307.72 217.43,-312.14\"/>\n</g>\n<!-- ppp_print\nL1520->const unsigned char * -->\n<g id=\"edge59\" class=\"edge\">\n<title>ppp_print\nL1520->const unsigned char *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M104.68,-698.84C118.94,-702.85 135.03,-709.71 145.66,-721.38 165.27,-742.91 149.95,-758.69 163.66,-784.38 176.72,-808.85 197.37,-832.62 213.74,-849.43\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"211.38,-852.03 220.92,-856.65 216.35,-847.09 211.38,-852.03\"/>\n</g>\n<!-- ppp_print\nL1520->unsigned int -->\n<g id=\"edge60\" class=\"edge\">\n<title>ppp_print\nL1520->unsigned int</title>\n<path fill=\"none\" stroke=\"black\" d=\"M105.25,-697.6C120.02,-701.31 136.38,-708.28 145.66,-721.38 180.24,-770.19 143.89,-1202.94 163.66,-1259.38 174.34,-1289.86 197.75,-1318.78 215.65,-1337.8\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"213.22,-1340.32 222.69,-1345.08 218.25,-1335.46 213.22,-1340.32\"/>\n</g>\n<!-- ppp_if_print\nL1596 -->\n<g id=\"node25\" class=\"node\">\n<title>ppp_if_print\nL1596</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"72.83\" cy=\"-128.38\" rx=\"39.7\" ry=\"18.27\"/>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-130.98\" font-family=\"Times,serif\" font-size=\"8.00\">ppp_if_print</text>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-121.98\" font-family=\"Times,serif\" font-size=\"8.00\">L1596</text>\n</g>\n<!-- ppp_if_print\nL1596->struct netdissect_options * -->\n<g id=\"edge61\" class=\"edge\">\n<title>ppp_if_print\nL1596->struct netdissect_options *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M111.11,-133.33C129.16,-137.42 150.03,-144.86 164.66,-158.38 208.17,-198.61 227.08,-268.33 234.57,-307.18\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"231.17,-308.05 236.39,-317.27 238.06,-306.8 231.17,-308.05\"/>\n</g>\n<!-- ppp_if_print\nL1596->const unsigned char * -->\n<g id=\"edge64\" class=\"edge\">\n<title>ppp_if_print\nL1596->const unsigned char *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M80.12,-146.6C94.45,-188.96 129.54,-297.62 145.66,-391.38 164.02,-498.11 143.26,-528.03 163.66,-634.38 178.76,-713.06 211.1,-802.22 228.06,-846.07\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"224.83,-847.42 231.73,-855.46 231.35,-844.88 224.83,-847.42\"/>\n</g>\n<!-- const struct pcap_pkthdr * -->\n<g id=\"node26\" class=\"node\">\n<title>const struct pcap_pkthdr *</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"239.95\" cy=\"-23.38\" rx=\"57.08\" ry=\"18\"/>\n<text text-anchor=\"middle\" x=\"239.95\" y=\"-21.48\" font-family=\"Times,serif\" font-size=\"8.00\">const struct pcap_pkthdr *</text>\n</g>\n<!-- ppp_if_print\nL1596->const struct pcap_pkthdr * -->\n<g id=\"edge62\" class=\"edge\">\n<title>ppp_if_print\nL1596->const struct pcap_pkthdr *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M106.31,-118.21C119.01,-113.6 133.43,-107.57 145.66,-100.38 170.79,-85.63 196.09,-64.25 213.98,-47.76\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"216.76,-49.96 221.66,-40.57 211.97,-44.85 216.76,-49.96\"/>\n</g>\n<!-- ./tcpdump/print-ppp.c -->\n<g id=\"node27\" class=\"node\">\n<title>./tcpdump/print-ppp.c</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"433.76\" cy=\"-23.38\" rx=\"48.56\" ry=\"18\"/>\n<text text-anchor=\"middle\" x=\"433.76\" y=\"-21.48\" font-family=\"Times,serif\" font-size=\"8.00\">./tcpdump/print-ppp.c</text>\n</g>\n<!-- const struct pcap_pkthdr *->./tcpdump/print-ppp.c -->\n<g id=\"edge63\" class=\"edge\">\n<title>const struct pcap_pkthdr *->./tcpdump/print-ppp.c</title>\n<path fill=\"none\" stroke=\"black\" d=\"M297.47,-23.38C321.73,-23.38 350.08,-23.38 374.53,-23.38\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"374.75,-26.88 384.75,-23.38 374.75,-19.88 374.75,-26.88\"/>\n<text text-anchor=\"middle\" x=\"323.24\" y=\"-25.58\" font-family=\"Times,serif\" font-size=\"6.00\">L1741</text>\n</g>\n<!-- ppp_hdlc_if_print\nL1665 -->\n<g id=\"node28\" class=\"node\">\n<title>ppp_hdlc_if_print\nL1665</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"72.83\" cy=\"-73.38\" rx=\"51.74\" ry=\"18.27\"/>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-75.98\" font-family=\"Times,serif\" font-size=\"8.00\">ppp_hdlc_if_print</text>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-66.98\" font-family=\"Times,serif\" font-size=\"8.00\">L1665</text>\n</g>\n<!-- ppp_hdlc_if_print\nL1665->struct netdissect_options * -->\n<g id=\"edge65\" class=\"edge\">\n<title>ppp_hdlc_if_print\nL1665->struct netdissect_options *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M116.36,-83.45C126.96,-87.59 137.59,-93.37 145.66,-101.38 204.11,-159.38 227.04,-258.63 235.09,-307.09\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"231.67,-307.83 236.67,-317.17 238.58,-306.75 231.67,-307.83\"/>\n</g>\n<!-- ppp_hdlc_if_print\nL1665->const unsigned char * -->\n<g id=\"edge67\" class=\"edge\">\n<title>ppp_hdlc_if_print\nL1665->const unsigned char *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M118.72,-81.9C129.19,-86.05 139.16,-92.22 145.66,-101.38 162.01,-124.41 159.26,-581.49 163.66,-609.38 177.62,-697.76 211.59,-798.49 228.72,-845.93\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"225.49,-847.29 232.21,-855.48 232.07,-844.89 225.49,-847.29\"/>\n</g>\n<!-- ppp_hdlc_if_print\nL1665->const struct pcap_pkthdr * -->\n<g id=\"edge66\" class=\"edge\">\n<title>ppp_hdlc_if_print\nL1665->const struct pcap_pkthdr *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M112.96,-61.54C135.51,-54.71 164.1,-46.05 188.34,-38.71\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"189.53,-42.01 198.09,-35.76 187.5,-35.31 189.53,-42.01\"/>\n</g>\n<!-- ppp_bsdos_if_print\nL1740 -->\n<g id=\"node29\" class=\"node\">\n<title>ppp_bsdos_if_print\nL1740</title>\n<ellipse fill=\"none\" stroke=\"black\" cx=\"72.83\" cy=\"-18.38\" rx=\"54.39\" ry=\"18.27\"/>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-20.98\" font-family=\"Times,serif\" font-size=\"8.00\">ppp_bsdos_if_print</text>\n<text text-anchor=\"middle\" x=\"72.83\" y=\"-11.98\" font-family=\"Times,serif\" font-size=\"8.00\">L1740</text>\n</g>\n<!-- ppp_bsdos_if_print\nL1740->struct netdissect_options * -->\n<g id=\"edge68\" class=\"edge\">\n<title>ppp_bsdos_if_print\nL1740->struct netdissect_options *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M118.22,-28.69C128.31,-32.79 138.23,-38.49 145.66,-46.38 216.32,-121.37 233.46,-250.26 237.62,-307.08\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"234.14,-307.38 238.28,-317.13 241.12,-306.93 234.14,-307.38\"/>\n</g>\n<!-- ppp_bsdos_if_print\nL1740->const unsigned char * -->\n<g id=\"edge70\" class=\"edge\">\n<title>ppp_bsdos_if_print\nL1740->const unsigned char *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M119.75,-27.86C129.67,-31.98 139.14,-37.9 145.66,-46.38 148.79,-50.45 219.93,-699.42 235.82,-844.74\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"232.38,-845.49 236.95,-855.05 239.34,-844.73 232.38,-845.49\"/>\n</g>\n<!-- ppp_bsdos_if_print\nL1740->const struct pcap_pkthdr * -->\n<g id=\"edge69\" class=\"edge\">\n<title>ppp_bsdos_if_print\nL1740->const struct pcap_pkthdr *</title>\n<path fill=\"none\" stroke=\"black\" d=\"M124.76,-12.52C137.78,-11.71 151.74,-11.43 164.66,-12.38 169.37,-12.73 174.24,-13.2 179.12,-13.75\"/>\n<polygon fill=\"black\" stroke=\"black\" points=\"178.76,-17.23 189.11,-14.98 179.62,-10.28 178.76,-17.23\"/>\n</g>\n</g>\n</svg>\n", | |
"text/plain": [ | |
"<graphviz.graphs.Digraph at 0x7fe13f8b2b00>" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 3 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [], | |
"metadata": { | |
"id": "CfMYK8Y6FPip" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
} | |
], | |
"metadata": { | |
"colab": { | |
"provenance": [], | |
"include_colab_link": true | |
}, | |
"kernelspec": { | |
"display_name": "Python 3", | |
"name": "python3" | |
}, | |
"language_info": { | |
"name": "python" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 0 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment