Skip to content

Instantly share code, notes, and snippets.

@maciejskorski
Last active May 9, 2023 04:20
Show Gist options
  • Save maciejskorski/65e877d738d1e9d6adcda631973aa7e5 to your computer and use it in GitHub Desktop.
Save maciejskorski/65e877d738d1e9d6adcda631973aa7e5 to your computer and use it in GitHub Desktop.
abstractsyntaxtree_demo.ipynb
Display the source blob
Display the rendered blob
Raw
{
"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&#45;&gt;struct netdissect_options * -->\n<g id=\"edge1\" class=\"edge\">\n<title>print_lcp_config_options\nL403&#45;&gt;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&#45;&gt;const unsigned char * -->\n<g id=\"edge3\" class=\"edge\">\n<title>print_lcp_config_options\nL403&#45;&gt;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&#45;&gt;unsigned int -->\n<g id=\"edge5\" class=\"edge\">\n<title>print_lcp_config_options\nL403&#45;&gt;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 *&#45;&gt;./tcpdump/netdissect.h -->\n<g id=\"edge2\" class=\"edge\">\n<title>struct netdissect_options *&#45;&gt;./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&#45;linux&#45;gnu/sys/types.h -->\n<g id=\"node5\" class=\"node\">\n<title>/usr/include/x86_64&#45;linux&#45;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&#45;linux&#45;gnu/sys/types.h</text>\n</g>\n<!-- const unsigned char *&#45;&gt;/usr/include/x86_64&#45;linux&#45;gnu/sys/types.h -->\n<g id=\"edge4\" class=\"edge\">\n<title>const unsigned char *&#45;&gt;/usr/include/x86_64&#45;linux&#45;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&#45;&gt;/usr/include/x86_64&#45;linux&#45;gnu/sys/types.h -->\n<g id=\"edge6\" class=\"edge\">\n<title>unsigned int&#45;&gt;/usr/include/x86_64&#45;linux&#45;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&#45;&gt;struct netdissect_options * -->\n<g id=\"edge7\" class=\"edge\">\n<title>print_ipcp_config_options\nL404&#45;&gt;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&#45;&gt;const unsigned char * -->\n<g id=\"edge8\" class=\"edge\">\n<title>print_ipcp_config_options\nL404&#45;&gt;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&#45;&gt;unsigned int -->\n<g id=\"edge9\" class=\"edge\">\n<title>print_ipcp_config_options\nL404&#45;&gt;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&#45;&gt;struct netdissect_options * -->\n<g id=\"edge10\" class=\"edge\">\n<title>print_ip6cp_config_options\nL405&#45;&gt;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&#45;&gt;const unsigned char * -->\n<g id=\"edge11\" class=\"edge\">\n<title>print_ip6cp_config_options\nL405&#45;&gt;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&#45;&gt;unsigned int -->\n<g id=\"edge12\" class=\"edge\">\n<title>print_ip6cp_config_options\nL405&#45;&gt;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&#45;&gt;struct netdissect_options * -->\n<g id=\"edge13\" class=\"edge\">\n<title>print_ccp_config_options\nL406&#45;&gt;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&#45;&gt;const unsigned char * -->\n<g id=\"edge14\" class=\"edge\">\n<title>print_ccp_config_options\nL406&#45;&gt;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&#45;&gt;unsigned int -->\n<g id=\"edge15\" class=\"edge\">\n<title>print_ccp_config_options\nL406&#45;&gt;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&#45;&gt;struct netdissect_options * -->\n<g id=\"edge16\" class=\"edge\">\n<title>print_bacp_config_options\nL407&#45;&gt;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&#45;&gt;const unsigned char * -->\n<g id=\"edge17\" class=\"edge\">\n<title>print_bacp_config_options\nL407&#45;&gt;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&#45;&gt;unsigned int -->\n<g id=\"edge18\" class=\"edge\">\n<title>print_bacp_config_options\nL407&#45;&gt;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&#45;&gt;struct netdissect_options * -->\n<g id=\"edge19\" class=\"edge\">\n<title>handle_ppp\nL408&#45;&gt;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&#45;&gt;const unsigned char * -->\n<g id=\"edge21\" class=\"edge\">\n<title>handle_ppp\nL408&#45;&gt;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&#45;&gt;unsigned int -->\n<g id=\"edge20\" class=\"edge\">\n<title>handle_ppp\nL408&#45;&gt;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&#45;&gt;struct netdissect_options * -->\n<g id=\"edge22\" class=\"edge\">\n<title>handle_ctrl_proto\nL412&#45;&gt;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&#45;&gt;const unsigned char * -->\n<g id=\"edge24\" class=\"edge\">\n<title>handle_ctrl_proto\nL412&#45;&gt;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&#45;&gt;unsigned int -->\n<g id=\"edge23\" class=\"edge\">\n<title>handle_ctrl_proto\nL412&#45;&gt;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&#45;&gt;struct netdissect_options * -->\n<g id=\"edge25\" class=\"edge\">\n<title>print_lcp_config_options\nL590&#45;&gt;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&#45;&gt;const unsigned char * -->\n<g id=\"edge26\" class=\"edge\">\n<title>print_lcp_config_options\nL590&#45;&gt;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&#45;&gt;unsigned int -->\n<g id=\"edge27\" class=\"edge\">\n<title>print_lcp_config_options\nL590&#45;&gt;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&#45;&gt;struct netdissect_options * -->\n<g id=\"edge28\" class=\"edge\">\n<title>handle_mlppp\nL804&#45;&gt;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&#45;&gt;const unsigned char * -->\n<g id=\"edge29\" class=\"edge\">\n<title>handle_mlppp\nL804&#45;&gt;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&#45;&gt;unsigned int -->\n<g id=\"edge30\" class=\"edge\">\n<title>handle_mlppp\nL804&#45;&gt;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&#45;&gt;struct netdissect_options * -->\n<g id=\"edge31\" class=\"edge\">\n<title>handle_chap\nL828&#45;&gt;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&#45;&gt;const unsigned char * -->\n<g id=\"edge32\" class=\"edge\">\n<title>handle_chap\nL828&#45;&gt;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&#45;&gt;unsigned int -->\n<g id=\"edge33\" class=\"edge\">\n<title>handle_chap\nL828&#45;&gt;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&#45;&gt;struct netdissect_options * -->\n<g id=\"edge34\" class=\"edge\">\n<title>handle_pap\nL899&#45;&gt;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&#45;&gt;const unsigned char * -->\n<g id=\"edge35\" class=\"edge\">\n<title>handle_pap\nL899&#45;&gt;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&#45;&gt;unsigned int -->\n<g id=\"edge36\" class=\"edge\">\n<title>handle_pap\nL899&#45;&gt;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&#45;&gt;struct netdissect_options * -->\n<g id=\"edge37\" class=\"edge\">\n<title>handle_bap\nL997&#45;&gt;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&#45;&gt;const unsigned char * -->\n<g id=\"edge38\" class=\"edge\">\n<title>handle_bap\nL997&#45;&gt;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&#45;&gt;unsigned int -->\n<g id=\"edge39\" class=\"edge\">\n<title>handle_bap\nL997&#45;&gt;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&#45;&gt;struct netdissect_options * -->\n<g id=\"edge40\" class=\"edge\">\n<title>print_ipcp_config_options\nL1006&#45;&gt;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&#45;&gt;const unsigned char * -->\n<g id=\"edge41\" class=\"edge\">\n<title>print_ipcp_config_options\nL1006&#45;&gt;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&#45;&gt;unsigned int -->\n<g id=\"edge42\" class=\"edge\">\n<title>print_ipcp_config_options\nL1006&#45;&gt;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&#45;&gt;struct netdissect_options * -->\n<g id=\"edge43\" class=\"edge\">\n<title>print_ip6cp_config_options\nL1145&#45;&gt;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&#45;&gt;const unsigned char * -->\n<g id=\"edge44\" class=\"edge\">\n<title>print_ip6cp_config_options\nL1145&#45;&gt;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&#45;&gt;unsigned int -->\n<g id=\"edge45\" class=\"edge\">\n<title>print_ip6cp_config_options\nL1145&#45;&gt;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&#45;&gt;struct netdissect_options * -->\n<g id=\"edge46\" class=\"edge\">\n<title>print_ccp_config_options\nL1205&#45;&gt;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&#45;&gt;const unsigned char * -->\n<g id=\"edge47\" class=\"edge\">\n<title>print_ccp_config_options\nL1205&#45;&gt;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&#45;&gt;unsigned int -->\n<g id=\"edge48\" class=\"edge\">\n<title>print_ccp_config_options\nL1205&#45;&gt;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&#45;&gt;struct netdissect_options * -->\n<g id=\"edge49\" class=\"edge\">\n<title>print_bacp_config_options\nL1301&#45;&gt;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&#45;&gt;const unsigned char * -->\n<g id=\"edge50\" class=\"edge\">\n<title>print_bacp_config_options\nL1301&#45;&gt;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&#45;&gt;unsigned int -->\n<g id=\"edge51\" class=\"edge\">\n<title>print_bacp_config_options\nL1301&#45;&gt;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&#45;&gt;struct netdissect_options * -->\n<g id=\"edge52\" class=\"edge\">\n<title>ppp_hdlc\nL1359&#45;&gt;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&#45;&gt;const unsigned char * -->\n<g id=\"edge53\" class=\"edge\">\n<title>ppp_hdlc\nL1359&#45;&gt;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&#45;&gt;unsigned int -->\n<g id=\"edge54\" class=\"edge\">\n<title>ppp_hdlc\nL1359&#45;&gt;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&#45;&gt;struct netdissect_options * -->\n<g id=\"edge55\" class=\"edge\">\n<title>handle_ppp\nL1458&#45;&gt;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&#45;&gt;const unsigned char * -->\n<g id=\"edge57\" class=\"edge\">\n<title>handle_ppp\nL1458&#45;&gt;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&#45;&gt;unsigned int -->\n<g id=\"edge56\" class=\"edge\">\n<title>handle_ppp\nL1458&#45;&gt;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&#45;&gt;struct netdissect_options * -->\n<g id=\"edge58\" class=\"edge\">\n<title>ppp_print\nL1520&#45;&gt;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&#45;&gt;const unsigned char * -->\n<g id=\"edge59\" class=\"edge\">\n<title>ppp_print\nL1520&#45;&gt;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&#45;&gt;unsigned int -->\n<g id=\"edge60\" class=\"edge\">\n<title>ppp_print\nL1520&#45;&gt;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&#45;&gt;struct netdissect_options * -->\n<g id=\"edge61\" class=\"edge\">\n<title>ppp_if_print\nL1596&#45;&gt;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&#45;&gt;const unsigned char * -->\n<g id=\"edge64\" class=\"edge\">\n<title>ppp_if_print\nL1596&#45;&gt;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&#45;&gt;const struct pcap_pkthdr * -->\n<g id=\"edge62\" class=\"edge\">\n<title>ppp_if_print\nL1596&#45;&gt;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&#45;ppp.c -->\n<g id=\"node27\" class=\"node\">\n<title>./tcpdump/print&#45;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&#45;ppp.c</text>\n</g>\n<!-- const struct pcap_pkthdr *&#45;&gt;./tcpdump/print&#45;ppp.c -->\n<g id=\"edge63\" class=\"edge\">\n<title>const struct pcap_pkthdr *&#45;&gt;./tcpdump/print&#45;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&#45;&gt;struct netdissect_options * -->\n<g id=\"edge65\" class=\"edge\">\n<title>ppp_hdlc_if_print\nL1665&#45;&gt;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&#45;&gt;const unsigned char * -->\n<g id=\"edge67\" class=\"edge\">\n<title>ppp_hdlc_if_print\nL1665&#45;&gt;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&#45;&gt;const struct pcap_pkthdr * -->\n<g id=\"edge66\" class=\"edge\">\n<title>ppp_hdlc_if_print\nL1665&#45;&gt;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&#45;&gt;struct netdissect_options * -->\n<g id=\"edge68\" class=\"edge\">\n<title>ppp_bsdos_if_print\nL1740&#45;&gt;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&#45;&gt;const unsigned char * -->\n<g id=\"edge70\" class=\"edge\">\n<title>ppp_bsdos_if_print\nL1740&#45;&gt;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&#45;&gt;const struct pcap_pkthdr * -->\n<g id=\"edge69\" class=\"edge\">\n<title>ppp_bsdos_if_print\nL1740&#45;&gt;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