/usr/share/doc/libnet1-doc/html/libnet-headers_8h-source.html is in libnet1-doc 1.1.4-2.1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>libnet: libnet-headers.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.3 -->
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main Page</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<h1>libnet-headers.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
<a name="l00002"></a>00002 <span class="comment"> * $Id: libnet-headers.h,v 1.15 2004/11/09 07:05:07 mike Exp $</span>
<a name="l00003"></a>00003 <span class="comment"> *</span>
<a name="l00004"></a>00004 <span class="comment"> * libnet-headers.h - Network routine library headers header file</span>
<a name="l00005"></a>00005 <span class="comment"> *</span>
<a name="l00006"></a>00006 <span class="comment"> * Copyright (c) 1998 - 2004 Mike D. Schiffman <mike@infonexus.com></span>
<a name="l00007"></a>00007 <span class="comment"> * All rights reserved.</span>
<a name="l00008"></a>00008 <span class="comment"> *</span>
<a name="l00009"></a>00009 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
<a name="l00010"></a>00010 <span class="comment"> * modification, are permitted provided that the following conditions</span>
<a name="l00011"></a>00011 <span class="comment"> * are met:</span>
<a name="l00012"></a>00012 <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span>
<a name="l00013"></a>00013 <span class="comment"> * notice, this list of conditions and the following disclaimer.</span>
<a name="l00014"></a>00014 <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span>
<a name="l00015"></a>00015 <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span>
<a name="l00016"></a>00016 <span class="comment"> * documentation and/or other materials provided with the distribution.</span>
<a name="l00017"></a>00017 <span class="comment"> *</span>
<a name="l00018"></a>00018 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND</span>
<a name="l00019"></a>00019 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span>
<a name="l00020"></a>00020 <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span>
<a name="l00021"></a>00021 <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE</span>
<a name="l00022"></a>00022 <span class="comment"> * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL</span>
<a name="l00023"></a>00023 <span class="comment"> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS</span>
<a name="l00024"></a>00024 <span class="comment"> * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)</span>
<a name="l00025"></a>00025 <span class="comment"> * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT</span>
<a name="l00026"></a>00026 <span class="comment"> * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY</span>
<a name="l00027"></a>00027 <span class="comment"> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF</span>
<a name="l00028"></a>00028 <span class="comment"> * SUCH DAMAGE.</span>
<a name="l00029"></a>00029 <span class="comment"> *</span>
<a name="l00030"></a>00030 <span class="comment"> */</span>
<a name="l00031"></a>00031
<a name="l00032"></a>00032 <span class="preprocessor">#ifndef __LIBNET_HEADERS_H</span>
<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#define __LIBNET_HEADERS_H</span>
<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="comment">/*</span>
<a name="l00035"></a>00035 <span class="comment"> * @file libnet-headers.h</span>
<a name="l00036"></a>00036 <span class="comment"> * @brief libnet header information</span>
<a name="l00037"></a>00037 <span class="comment"> */</span>
<a name="l00038"></a>00038
<a name="l00039"></a>00039 <span class="comment">/*</span>
<a name="l00040"></a>00040 <span class="comment"> * Libnet defines header sizes for every builder function exported.</span>
<a name="l00041"></a>00041 <span class="comment"> */</span>
<a name="l00042"></a>00042 <span class="preprocessor">#define LIBNET_802_1Q_H 0x12 </span>
<a name="l00043"></a>00043 <span class="preprocessor">#define LIBNET_802_1X_H 0x04 </span>
<a name="l00044"></a>00044 <span class="preprocessor">#define LIBNET_802_2_H 0x03 </span>
<a name="l00045"></a>00045 <span class="preprocessor">#define LIBNET_802_2SNAP_H 0x08 </span>
<a name="l00046"></a>00046 <span class="preprocessor">#define LIBNET_802_3_H 0x0e </span>
<a name="l00047"></a>00047 <span class="preprocessor">#define LIBNET_ARP_H 0x08 </span>
<a name="l00048"></a>00048 <span class="preprocessor">#define LIBNET_ARP_ETH_IP_H 0x1c </span>
<a name="l00049"></a>00049 <span class="preprocessor">#define LIBNET_BGP4_HEADER_H 0x13 </span>
<a name="l00050"></a>00050 <span class="preprocessor">#define LIBNET_BGP4_OPEN_H 0x0a </span>
<a name="l00051"></a>00051 <span class="preprocessor">#define LIBNET_BGP4_UPDATE_H 0x04 </span>
<a name="l00052"></a>00052 <span class="preprocessor">#define LIBNET_BGP4_NOTIFICATION_H 0x02 </span>
<a name="l00053"></a>00053 <span class="preprocessor">#define LIBNET_CDP_H 0x08 </span>
<a name="l00054"></a>00054 <span class="preprocessor">#define LIBNET_DHCPV4_H 0xf0 </span>
<a name="l00055"></a>00055 <span class="preprocessor">#define LIBNET_UDP_DNSV4_H 0x0c </span>
<a name="l00056"></a>00056 <span class="preprocessor">#define LIBNET_TCP_DNSV4_H 0x0e </span>
<a name="l00057"></a>00057 <span class="preprocessor">#define LIBNET_ETH_H 0x0e </span>
<a name="l00058"></a>00058 <span class="preprocessor">#define LIBNET_FDDI_H 0x15 </span>
<a name="l00059"></a>00059 <span class="preprocessor">#define LIBNET_ICMPV4_H 0x04 </span>
<a name="l00060"></a>00060 <span class="preprocessor">#define LIBNET_ICMPV4_ECHO_H 0x08 </span>
<a name="l00061"></a>00061 <span class="preprocessor">#define LIBNET_ICMPV4_MASK_H 0x0c </span>
<a name="l00062"></a>00062 <span class="preprocessor">#define LIBNET_ICMPV4_UNREACH_H 0x08 </span>
<a name="l00063"></a>00063 <span class="preprocessor">#define LIBNET_ICMPV4_TIMXCEED_H 0x08 </span>
<a name="l00064"></a>00064 <span class="preprocessor">#define LIBNET_ICMPV4_REDIRECT_H 0x08 </span>
<a name="l00065"></a>00065 <span class="preprocessor">#define LIBNET_ICMPV4_TS_H 0x14 </span>
<a name="l00066"></a>00066 <span class="preprocessor">#define LIBNET_ICMPV6_H 0x08 </span>
<a name="l00067"></a>00067 <span class="preprocessor">#define LIBNET_IGMP_H 0x08 </span>
<a name="l00068"></a>00068 <span class="preprocessor">#define LIBNET_IPV4_H 0x14 </span>
<a name="l00069"></a>00069 <span class="preprocessor">#define LIBNET_IPV6_H 0x28 </span>
<a name="l00070"></a>00070 <span class="preprocessor">#define LIBNET_IPV6_FRAG_H 0x08 </span>
<a name="l00071"></a>00071 <span class="preprocessor">#define LIBNET_IPV6_ROUTING_H 0x04 </span>
<a name="l00072"></a>00072 <span class="preprocessor">#define LIBNET_IPV6_DESTOPTS_H 0x02 </span>
<a name="l00073"></a>00073 <span class="preprocessor">#define LIBNET_IPV6_HBHOPTS_H 0x02 </span>
<a name="l00074"></a>00074 <span class="preprocessor">#define LIBNET_IPSEC_ESP_HDR_H 0x0c </span>
<a name="l00075"></a>00075 <span class="preprocessor">#define LIBNET_IPSEC_ESP_FTR_H 0x02 </span>
<a name="l00076"></a>00076 <span class="preprocessor">#define LIBNET_IPSEC_AH_H 0x10 </span>
<a name="l00077"></a>00077 <span class="preprocessor">#define LIBNET_ISL_H 0x1a </span>
<a name="l00078"></a>00078 <span class="preprocessor">#define LIBNET_GRE_H 0x04 </span>
<a name="l00079"></a>00079 <span class="preprocessor">#define LIBNET_GRE_SRE_H 0x04 </span>
<a name="l00080"></a>00080 <span class="preprocessor">#define LIBNET_MPLS_H 0x04 </span>
<a name="l00081"></a>00081 <span class="preprocessor">#define LIBNET_OSPF_H 0x10 </span>
<a name="l00082"></a>00082 <span class="preprocessor">#define LIBNET_OSPF_HELLO_H 0x18 </span>
<a name="l00083"></a>00083 <span class="preprocessor">#define LIBNET_OSPF_DBD_H 0x08 </span>
<a name="l00084"></a>00084 <span class="preprocessor">#define LIBNET_OSPF_LSR_H 0x0c </span>
<a name="l00085"></a>00085 <span class="preprocessor">#define LIBNET_OSPF_LSU_H 0x04 </span>
<a name="l00086"></a>00086 <span class="preprocessor">#define LIBNET_OSPF_LSA_H 0x14 </span>
<a name="l00087"></a>00087 <span class="preprocessor">#define LIBNET_OSPF_AUTH_H 0x08 </span>
<a name="l00088"></a>00088 <span class="preprocessor">#define LIBNET_OSPF_CKSUM 0x10 </span>
<a name="l00089"></a>00089 <span class="preprocessor">#define LIBNET_OSPF_LS_RTR_H 0x10 </span>
<a name="l00090"></a>00090 <span class="preprocessor">#define LIBNET_OSPF_LS_NET_H 0x08 </span>
<a name="l00091"></a>00091 <span class="preprocessor">#define LIBNET_OSPF_LS_SUM_H 0x0c </span>
<a name="l00092"></a>00092 <span class="preprocessor">#define LIBNET_OSPF_LS_AS_EXT_H 0x10 </span>
<a name="l00093"></a>00093 <span class="preprocessor">#define LIBNET_NTP_H 0x30 </span>
<a name="l00094"></a>00094 <span class="preprocessor">#define LIBNET_RIP_H 0x18 </span>
<a name="l00095"></a>00095 <span class="preprocessor">#define LIBNET_RPC_CALL_H 0x28 </span>
<a name="l00098"></a>00098 <span class="preprocessor">#define LIBNET_RPC_CALL_TCP_H 0x2c </span>
<a name="l00101"></a>00101 <span class="preprocessor">#define LIBNET_SEBEK_H 0x30 </span><span class="comment">/* sebek header: 48 bytes */</span>
<a name="l00102"></a>00102 <span class="preprocessor">#define LIBNET_STP_CONF_H 0x23 </span>
<a name="l00103"></a>00103 <span class="preprocessor">#define LIBNET_STP_TCN_H 0x04 </span>
<a name="l00104"></a>00104 <span class="preprocessor">#define LIBNET_TOKEN_RING_H 0x16 </span>
<a name="l00105"></a>00105 <span class="preprocessor">#define LIBNET_TCP_H 0x14 </span>
<a name="l00106"></a>00106 <span class="preprocessor">#define LIBNET_UDP_H 0x08 </span>
<a name="l00107"></a>00107 <span class="preprocessor">#define LIBNET_VRRP_H 0x08 </span>
<a name="l00108"></a>00108 <span class="preprocessor">#define LIBNET_HSRP_H 0x14 </span>
<a name="l00110"></a>00110 <span class="preprocessor"></span><span class="comment">/*</span>
<a name="l00111"></a>00111 <span class="comment"> * IEEE 802.1Q (Virtual Local Area Network) VLAN header, static header </span>
<a name="l00112"></a>00112 <span class="comment"> * size: 18 bytes</span>
<a name="l00113"></a>00113 <span class="comment"> */</span>
<a name="l00114"></a>00114 <span class="keyword">struct </span>libnet_802_1q_hdr
<a name="l00115"></a>00115 {
<a name="l00116"></a>00116 u_int8_t vlan_dhost[ETHER_ADDR_LEN];
<a name="l00117"></a>00117 u_int8_t vlan_shost[ETHER_ADDR_LEN];
<a name="l00118"></a>00118 u_int16_t vlan_tpi;
<a name="l00119"></a>00119 u_int16_t vlan_priority_c_vid;
<a name="l00120"></a>00120 <span class="preprocessor">#define LIBNET_802_1Q_PRIMASK 0x0007 </span>
<a name="l00121"></a>00121 <span class="preprocessor">#define LIBNET_802_1Q_CFIMASK 0x0001 </span>
<a name="l00122"></a>00122 <span class="preprocessor">#define LIBNET_802_1Q_VIDMASK 0x0fff </span>
<a name="l00123"></a>00123 <span class="preprocessor"> u_int16_t vlan_len; </span>
<a name="l00124"></a>00124 <span class="preprocessor">}; </span>
<a name="l00125"></a>00125 <span class="preprocessor"></span>
<a name="l00126"></a>00126 <span class="comment">/*</span>
<a name="l00127"></a>00127 <span class="comment"> * IEEE 802.1X EAP (Extensible Authentication Protocol) header, static header</span>
<a name="l00128"></a>00128 <span class="comment"> * size: 4 bytes</span>
<a name="l00129"></a>00129 <span class="comment"> */</span>
<a name="l00130"></a>00130 <span class="keyword">struct </span>libnet_802_1x_hdr
<a name="l00131"></a>00131 {
<a name="l00132"></a>00132 u_int8_t dot1x_version;
<a name="l00133"></a>00133 u_int8_t dot1x_type;
<a name="l00134"></a>00134 <span class="preprocessor">#define LIBNET_802_1X_PACKET 0x00 </span>
<a name="l00135"></a>00135 <span class="preprocessor">#define LIBNET_802_1X_START 0x01 </span>
<a name="l00136"></a>00136 <span class="preprocessor">#define LIBNET_802_1X_LOGOFF 0x02 </span>
<a name="l00137"></a>00137 <span class="preprocessor">#define LIBNET_802_1X_KEY 0x03 </span>
<a name="l00138"></a>00138 <span class="preprocessor">#define LIBNET_802_1X_ENCASFAL 0x04 </span>
<a name="l00139"></a>00139 <span class="preprocessor"> u_int16_t dot1x_length; </span>
<a name="l00140"></a>00140 <span class="preprocessor">}; </span>
<a name="l00141"></a>00141 <span class="preprocessor"></span>
<a name="l00142"></a>00142 <span class="comment">/*</span>
<a name="l00143"></a>00143 <span class="comment"> * IEEE 802.2 LLC header</span>
<a name="l00144"></a>00144 <span class="comment"> * Link Layer Control</span>
<a name="l00145"></a>00145 <span class="comment"> * static header size: 3 bytes</span>
<a name="l00146"></a>00146 <span class="comment"> */</span>
<a name="l00147"></a>00147 <span class="keyword">struct </span>libnet_802_2_hdr
<a name="l00148"></a>00148 {
<a name="l00149"></a>00149 u_int8_t llc_dsap; <span class="comment">/* destination service access point */</span>
<a name="l00150"></a>00150 u_int8_t llc_ssap; <span class="comment">/* source service access point */</span>
<a name="l00151"></a>00151 <span class="preprocessor">#define LIBNET_SAP_STP 0x42</span>
<a name="l00152"></a>00152 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_SAP_SNAP 0xaa</span>
<a name="l00153"></a>00153 <span class="preprocessor"></span> u_int8_t llc_control; <span class="comment">/* control field */</span>
<a name="l00154"></a>00154 };
<a name="l00155"></a>00155
<a name="l00156"></a>00156
<a name="l00157"></a>00157 <span class="comment">/*</span>
<a name="l00158"></a>00158 <span class="comment"> * IEEE 802.2 LLC/SNAP header</span>
<a name="l00159"></a>00159 <span class="comment"> * SubNetwork Attachment Point</span>
<a name="l00160"></a>00160 <span class="comment"> * static header size: 8 bytes</span>
<a name="l00161"></a>00161 <span class="comment"> */</span>
<a name="l00162"></a>00162 <span class="keyword">struct </span>libnet_802_2snap_hdr
<a name="l00163"></a>00163 {
<a name="l00164"></a>00164 u_int8_t snap_dsap; <span class="comment">/* destination service access point */</span>
<a name="l00165"></a>00165 u_int8_t snap_ssap; <span class="comment">/* destination service access point */</span>
<a name="l00166"></a>00166 u_int8_t snap_control; <span class="comment">/* control field */</span>
<a name="l00167"></a>00167 u_int8_t snap_oui[3]; <span class="comment">/* OUI */</span>
<a name="l00168"></a>00168 u_int16_t snap_type; <span class="comment">/* type */</span>
<a name="l00169"></a>00169 };
<a name="l00170"></a>00170
<a name="l00171"></a>00171
<a name="l00172"></a>00172 <span class="comment">/*</span>
<a name="l00173"></a>00173 <span class="comment"> * 802.3 header</span>
<a name="l00174"></a>00174 <span class="comment"> * IEEE Ethernet</span>
<a name="l00175"></a>00175 <span class="comment"> * Static header size: 14 bytes</span>
<a name="l00176"></a>00176 <span class="comment"> */</span>
<a name="l00177"></a>00177 <span class="keyword">struct </span>libnet_802_3_hdr
<a name="l00178"></a>00178 {
<a name="l00179"></a>00179 u_int8_t _802_3_dhost[ETHER_ADDR_LEN];<span class="comment">/* destination ethernet address */</span>
<a name="l00180"></a>00180 u_int8_t _802_3_shost[ETHER_ADDR_LEN];<span class="comment">/* source ethernet address */</span>
<a name="l00181"></a>00181 u_int16_t _802_3_len; <span class="comment">/* packet type ID */</span>
<a name="l00182"></a>00182 };
<a name="l00183"></a>00183
<a name="l00184"></a>00184
<a name="l00185"></a>00185 <span class="comment">/* </span>
<a name="l00186"></a>00186 <span class="comment"> * ARP header</span>
<a name="l00187"></a>00187 <span class="comment"> * Address Resolution Protocol</span>
<a name="l00188"></a>00188 <span class="comment"> * Base header size: 8 bytes</span>
<a name="l00189"></a>00189 <span class="comment"> */</span>
<a name="l00190"></a>00190 <span class="keyword">struct </span>libnet_arp_hdr
<a name="l00191"></a>00191 {
<a name="l00192"></a>00192 u_int16_t ar_hrd; <span class="comment">/* format of hardware address */</span>
<a name="l00193"></a>00193 <span class="preprocessor">#define ARPHRD_NETROM 0 </span><span class="comment">/* from KA9Q: NET/ROM pseudo */</span>
<a name="l00194"></a>00194 <span class="preprocessor">#define ARPHRD_ETHER 1 </span><span class="comment">/* Ethernet 10Mbps */</span>
<a name="l00195"></a>00195 <span class="preprocessor">#define ARPHRD_EETHER 2 </span><span class="comment">/* Experimental Ethernet */</span>
<a name="l00196"></a>00196 <span class="preprocessor">#define ARPHRD_AX25 3 </span><span class="comment">/* AX.25 Level 2 */</span>
<a name="l00197"></a>00197 <span class="preprocessor">#define ARPHRD_PRONET 4 </span><span class="comment">/* PROnet token ring */</span>
<a name="l00198"></a>00198 <span class="preprocessor">#define ARPHRD_CHAOS 5 </span><span class="comment">/* Chaosnet */</span>
<a name="l00199"></a>00199 <span class="preprocessor">#define ARPHRD_IEEE802 6 </span><span class="comment">/* IEEE 802.2 Ethernet/TR/TB */</span>
<a name="l00200"></a>00200 <span class="preprocessor">#define ARPHRD_ARCNET 7 </span><span class="comment">/* ARCnet */</span>
<a name="l00201"></a>00201 <span class="preprocessor">#define ARPHRD_APPLETLK 8 </span><span class="comment">/* APPLEtalk */</span>
<a name="l00202"></a>00202 <span class="preprocessor">#define ARPHRD_LANSTAR 9 </span><span class="comment">/* Lanstar */</span>
<a name="l00203"></a>00203 <span class="preprocessor">#define ARPHRD_DLCI 15 </span><span class="comment">/* Frame Relay DLCI */</span>
<a name="l00204"></a>00204 <span class="preprocessor">#define ARPHRD_ATM 19 </span><span class="comment">/* ATM */</span>
<a name="l00205"></a>00205 <span class="preprocessor">#define ARPHRD_METRICOM 23 </span><span class="comment">/* Metricom STRIP (new IANA id) */</span>
<a name="l00206"></a>00206 <span class="preprocessor">#define ARPHRD_IPSEC 31 </span><span class="comment">/* IPsec tunnel */</span>
<a name="l00207"></a>00207 u_int16_t ar_pro; <span class="comment">/* format of protocol address */</span>
<a name="l00208"></a>00208 u_int8_t ar_hln; <span class="comment">/* length of hardware address */</span>
<a name="l00209"></a>00209 u_int8_t ar_pln; <span class="comment">/* length of protocol addres */</span>
<a name="l00210"></a>00210 u_int16_t ar_op; <span class="comment">/* operation type */</span>
<a name="l00211"></a>00211 <span class="preprocessor">#define ARPOP_REQUEST 1 </span><span class="comment">/* req to resolve address */</span>
<a name="l00212"></a>00212 <span class="preprocessor">#define ARPOP_REPLY 2 </span><span class="comment">/* resp to previous request */</span>
<a name="l00213"></a>00213 <span class="preprocessor">#define ARPOP_REVREQUEST 3 </span><span class="comment">/* req protocol address given hardware */</span>
<a name="l00214"></a>00214 <span class="preprocessor">#define ARPOP_REVREPLY 4 </span><span class="comment">/* resp giving protocol address */</span>
<a name="l00215"></a>00215 <span class="preprocessor">#define ARPOP_INVREQUEST 8 </span><span class="comment">/* req to identify peer */</span>
<a name="l00216"></a>00216 <span class="preprocessor">#define ARPOP_INVREPLY 9 </span><span class="comment">/* resp identifying peer */</span>
<a name="l00217"></a>00217 <span class="comment">/* address information allocated dynamically */</span>
<a name="l00218"></a>00218 };
<a name="l00219"></a>00219
<a name="l00220"></a>00220 <span class="comment">/*</span>
<a name="l00221"></a>00221 <span class="comment"> * BGP4 header</span>
<a name="l00222"></a>00222 <span class="comment"> * Border Gateway Protocol 4</span>
<a name="l00223"></a>00223 <span class="comment"> * Base header size : 19 bytes</span>
<a name="l00224"></a>00224 <span class="comment"> */</span>
<a name="l00225"></a>00225 <span class="keyword">struct </span>libnet_bgp4_header_hdr
<a name="l00226"></a>00226 {
<a name="l00227"></a>00227 <span class="preprocessor">#define LIBNET_BGP4_MARKER_SIZE 16</span>
<a name="l00228"></a>00228 <span class="preprocessor"></span> u_int8_t marker[LIBNET_BGP4_MARKER_SIZE];
<a name="l00229"></a>00229 u_int16_t len;
<a name="l00230"></a>00230 u_int8_t type;
<a name="l00231"></a>00231 <span class="preprocessor">#define LIBNET_BGP4_OPEN 1</span>
<a name="l00232"></a>00232 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_BGP4_UPDATE 2</span>
<a name="l00233"></a>00233 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_BGP4_NOTIFICATION 3</span>
<a name="l00234"></a>00234 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_BGP4_KEEPALIVE 4</span>
<a name="l00235"></a>00235 <span class="preprocessor"></span>};
<a name="l00236"></a>00236
<a name="l00237"></a>00237 <span class="comment">/*</span>
<a name="l00238"></a>00238 <span class="comment"> * BGP4 open header</span>
<a name="l00239"></a>00239 <span class="comment"> * Border Gateway Protocol 4</span>
<a name="l00240"></a>00240 <span class="comment"> * Base header size : 10 bytes</span>
<a name="l00241"></a>00241 <span class="comment"> */</span>
<a name="l00242"></a>00242 <span class="keyword">struct </span>libnet_bgp4_open_hdr
<a name="l00243"></a>00243 {
<a name="l00244"></a>00244 u_int8_t version;
<a name="l00245"></a>00245 u_int16_t src_as;
<a name="l00246"></a>00246 u_int16_t hold_time;
<a name="l00247"></a>00247 u_int32_t bgp_id;
<a name="l00248"></a>00248 u_int8_t opt_len;
<a name="l00249"></a>00249 };
<a name="l00250"></a>00250
<a name="l00251"></a>00251 <span class="comment">/*</span>
<a name="l00252"></a>00252 <span class="comment"> * BGP4 notification message</span>
<a name="l00253"></a>00253 <span class="comment"> *</span>
<a name="l00254"></a>00254 <span class="comment"> * Border Gateway Protocol 4</span>
<a name="l00255"></a>00255 <span class="comment"> * Base header size : 2 bytes</span>
<a name="l00256"></a>00256 <span class="comment"> *</span>
<a name="l00257"></a>00257 <span class="comment"> * Use payload if you need data</span>
<a name="l00258"></a>00258 <span class="comment"> */</span>
<a name="l00259"></a>00259 <span class="keyword">struct </span>libnet_bgp4_notification_hdr
<a name="l00260"></a>00260 {
<a name="l00261"></a>00261 <span class="preprocessor">#define LIBNET_BGP4_MESSAGE_HEADER_ERROR 1</span>
<a name="l00262"></a>00262 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_BGP4_OPEN_MESSAGE_ERROR 2</span>
<a name="l00263"></a>00263 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_BGP4_UPDATE_MESSAGE_ERROR 3</span>
<a name="l00264"></a>00264 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_BGP4_HOLD_TIMER_EXPIRED 4</span>
<a name="l00265"></a>00265 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_BGP4_FINITE_STATE__ERROR 5</span>
<a name="l00266"></a>00266 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_BGP4_CEASE 6</span>
<a name="l00267"></a>00267 <span class="preprocessor"></span> u_int8_t err_code;
<a name="l00268"></a>00268
<a name="l00269"></a>00269 <span class="comment">/* Message Header Error subcodes */</span>
<a name="l00270"></a>00270 <span class="preprocessor">#define LIBNET_BGP4_CONNECTION_NOT_SYNCHRONIZED 1</span>
<a name="l00271"></a>00271 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_BGP4_BAD_MESSAGE_LENGTH 2</span>
<a name="l00272"></a>00272 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_BGP4_BAD_MESSAGE_TYPE 3</span>
<a name="l00273"></a>00273 <span class="preprocessor"></span><span class="comment">/* OPEN Message Error subcodes */</span>
<a name="l00274"></a>00274 <span class="preprocessor">#define LIBNET_BGP4_UNSUPPORTED_VERSION_NUMBER 1</span>
<a name="l00275"></a>00275 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_BGP4_BAD_PEER_AS 2</span>
<a name="l00276"></a>00276 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_BGP4_BAD_BGP_IDENTIFIER 3</span>
<a name="l00277"></a>00277 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_BGP4_UNSUPPORTED_OPTIONAL_PARAMETER 4</span>
<a name="l00278"></a>00278 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_BGP4_AUTHENTICATION_FAILURE 5</span>
<a name="l00279"></a>00279 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_BGP4_UNACCEPTABLE_HOLD_TIME 6</span>
<a name="l00280"></a>00280 <span class="preprocessor"></span><span class="comment">/* UPDATE Message Error subcodes */</span>
<a name="l00281"></a>00281 <span class="preprocessor">#define LIBNET_BGP4_MALFORMED_ATTRIBUTE_LIST</span>
<a name="l00282"></a>00282 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_BGP4_UNRECOGNIZED_WELL_KNOWN_ATTRIBUTE</span>
<a name="l00283"></a>00283 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_BGP4_MISSING_WELL_KNOWN_ATTRIBUTE</span>
<a name="l00284"></a>00284 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_BGP4_ATTRIBUTE_FLAGS_ERROR</span>
<a name="l00285"></a>00285 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_BGP4_ATTRIBUTE_LENGTH_ERROR</span>
<a name="l00286"></a>00286 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_BGP4_INVALID_ORIGIN_ATTRIBUTE</span>
<a name="l00287"></a>00287 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_BGP4_AS_ROUTING_LOOP</span>
<a name="l00288"></a>00288 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_BGP4_INVALID_NEXT_HOP_ATTRIBUTE</span>
<a name="l00289"></a>00289 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_BGP4_OPTIONAL_ATTRIBUTE_ERROR</span>
<a name="l00290"></a>00290 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_BGP4_INVALID_NETWORK_FIELD</span>
<a name="l00291"></a>00291 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_BGP4_MALFORMED_AS_PATH</span>
<a name="l00292"></a>00292 <span class="preprocessor"></span> u_int8_t err_subcode;
<a name="l00293"></a>00293 };
<a name="l00294"></a>00294
<a name="l00295"></a>00295
<a name="l00296"></a>00296
<a name="l00297"></a>00297 <span class="comment">/*</span>
<a name="l00298"></a>00298 <span class="comment"> * For checksum stuff -- IANA says 135-254 is "unassigned" as of 12.2001.</span>
<a name="l00299"></a>00299 <span class="comment"> * Let's hope this one stays that way for a while!</span>
<a name="l00300"></a>00300 <span class="comment"> */</span>
<a name="l00301"></a>00301 <span class="preprocessor">#define LIBNET_PROTO_CDP 200</span>
<a name="l00302"></a>00302 <span class="preprocessor"></span>
<a name="l00303"></a>00303 <span class="comment">/*</span>
<a name="l00304"></a>00304 <span class="comment"> * CDP header</span>
<a name="l00305"></a>00305 <span class="comment"> * Cisco Discovery Protocol</span>
<a name="l00306"></a>00306 <span class="comment"> * Base header size: 8 bytes</span>
<a name="l00307"></a>00307 <span class="comment"> */</span>
<a name="l00308"></a>00308 <span class="keyword">struct </span>libnet_cdp_hdr
<a name="l00309"></a>00309 {
<a name="l00310"></a>00310 u_int8_t cdp_version; <span class="comment">/* version (should always be 0x01) */</span>
<a name="l00311"></a>00311 u_int8_t cdp_ttl; <span class="comment">/* time reciever should hold info in this packet */</span>
<a name="l00312"></a>00312 u_int16_t cdp_sum; <span class="comment">/* checksum */</span>
<a name="l00313"></a>00313 u_int16_t cdp_type; <span class="comment">/* type */</span>
<a name="l00314"></a>00314 <span class="preprocessor">#define LIBNET_CDP_DEVID 0x1 </span><span class="comment">/* device id */</span>
<a name="l00315"></a>00315 <span class="preprocessor">#define LIBNET_CDP_ADDRESS 0x2 </span><span class="comment">/* address */</span>
<a name="l00316"></a>00316 <span class="preprocessor">#define LIBNET_CDP_PORTID 0x3 </span><span class="comment">/* port id */</span>
<a name="l00317"></a>00317 <span class="preprocessor">#define LIBNET_CDP_CAPABIL 0x4 </span><span class="comment">/* capabilities */</span>
<a name="l00318"></a>00318 <span class="preprocessor">#define LIBNET_CDP_VERSION 0x5 </span><span class="comment">/* version */</span>
<a name="l00319"></a>00319 <span class="preprocessor">#define LIBNET_CDP_PLATFORM 0x6 </span><span class="comment">/* platform */</span>
<a name="l00320"></a>00320 <span class="preprocessor">#define LIBNET_CDP_IPPREFIX 0x7 </span><span class="comment">/* ip prefix */</span>
<a name="l00321"></a>00321 u_int16_t cdp_len; <span class="comment">/* type + length + value */</span>
<a name="l00322"></a>00322 <span class="comment">/* value information done dynamically */</span>
<a name="l00323"></a>00323
<a name="l00324"></a>00324 <span class="comment">/* CDP capabilities */</span>
<a name="l00325"></a>00325 <span class="preprocessor">#define LIBNET_CDP_CAP_L3R 0x01</span><span class="comment">/* performs level 3 routing */</span>
<a name="l00326"></a>00326 <span class="preprocessor">#define LIBNET_CDP_CAP_L2B 0x02</span><span class="comment">/* performs level 2 transparent bridging */</span>
<a name="l00327"></a>00327 <span class="preprocessor">#define LIBNET_CDP_CAP_L2SRB 0x04</span><span class="comment">/* performs level 2 sourceroute bridging */</span>
<a name="l00328"></a>00328 <span class="preprocessor">#define LIBNET_CDP_CAP_L2S 0x08</span><span class="comment">/* performs level 2 switching */</span>
<a name="l00329"></a>00329 <span class="preprocessor">#define LIBNET_CDP_CAP_SR 0x10</span><span class="comment">/* sends and recieves packets on a network */</span>
<a name="l00330"></a>00330 <span class="preprocessor">#define LIBNET_CDP_CAP_NOI 0x20</span><span class="comment">/* does not forward IGMP on non-router ports */</span>
<a name="l00331"></a>00331 <span class="preprocessor">#define LIBNET_CDP_CAP_L1F 0x40</span><span class="comment">/* provides level 1 functionality */</span>
<a name="l00332"></a>00332 };
<a name="l00333"></a>00333
<a name="l00334"></a>00334
<a name="l00335"></a>00335 <span class="comment">/*</span>
<a name="l00336"></a>00336 <span class="comment"> * Used as an overlay for type/len/values</span>
<a name="l00337"></a>00337 <span class="comment"> */</span>
<a name="l00338"></a>00338 <span class="keyword">struct </span>libnet_cdp_value_hdr
<a name="l00339"></a>00339 {
<a name="l00340"></a>00340 u_int16_t cdp_type;
<a name="l00341"></a>00341 u_int16_t cdp_len;
<a name="l00342"></a>00342 };
<a name="l00343"></a>00343
<a name="l00344"></a>00344
<a name="l00345"></a>00345 <span class="comment">/*</span>
<a name="l00346"></a>00346 <span class="comment"> * DHCP header</span>
<a name="l00347"></a>00347 <span class="comment"> * Dynamic Host Configuration Protocol</span>
<a name="l00348"></a>00348 <span class="comment"> * Static header size: f0 bytes</span>
<a name="l00349"></a>00349 <span class="comment"> */</span>
<a name="l00350"></a>00350 <span class="keyword">struct </span>libnet_dhcpv4_hdr
<a name="l00351"></a>00351 {
<a name="l00352"></a>00352 u_int8_t dhcp_opcode; <span class="comment">/* opcode */</span>
<a name="l00353"></a>00353 <span class="preprocessor">#define LIBNET_DHCP_REQUEST 0x1</span>
<a name="l00354"></a>00354 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_REPLY 0x2</span>
<a name="l00355"></a>00355 <span class="preprocessor"></span> u_int8_t dhcp_htype; <span class="comment">/* hardware address type */</span>
<a name="l00356"></a>00356 u_int8_t dhcp_hlen; <span class="comment">/* hardware address length */</span>
<a name="l00357"></a>00357 u_int8_t dhcp_hopcount; <span class="comment">/* used by proxy servers */</span>
<a name="l00358"></a>00358 u_int32_t dhcp_xid; <span class="comment">/* transaction ID */</span>
<a name="l00359"></a>00359 u_int16_t dhcp_secs; <span class="comment">/* number of seconds since trying to bootstrap */</span>
<a name="l00360"></a>00360 u_int16_t dhcp_flags; <span class="comment">/* flags for DHCP, unused for BOOTP */</span>
<a name="l00361"></a>00361 u_int32_t dhcp_cip; <span class="comment">/* client's IP */</span>
<a name="l00362"></a>00362 u_int32_t dhcp_yip; <span class="comment">/* your IP */</span>
<a name="l00363"></a>00363 u_int32_t dhcp_sip; <span class="comment">/* server's IP */</span>
<a name="l00364"></a>00364 u_int32_t dhcp_gip; <span class="comment">/* gateway IP */</span>
<a name="l00365"></a>00365 u_int8_t dhcp_chaddr[16]; <span class="comment">/* client hardware address */</span>
<a name="l00366"></a>00366 u_int8_t dhcp_sname[64]; <span class="comment">/* server host name */</span>
<a name="l00367"></a>00367 u_int8_t dhcp_file[128]; <span class="comment">/* boot file name */</span>
<a name="l00368"></a>00368 u_int32_t dhcp_magic; <span class="comment">/* BOOTP magic header */</span>
<a name="l00369"></a>00369 <span class="preprocessor">#define DHCP_MAGIC 0x63825363</span>
<a name="l00370"></a>00370 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_BOOTP_MIN_LEN 0x12c</span>
<a name="l00371"></a>00371 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_PAD 0x00</span>
<a name="l00372"></a>00372 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_SUBNETMASK 0x01</span>
<a name="l00373"></a>00373 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_TIMEOFFSET 0x02</span>
<a name="l00374"></a>00374 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_ROUTER 0x03</span>
<a name="l00375"></a>00375 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_TIMESERVER 0x04</span>
<a name="l00376"></a>00376 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_NAMESERVER 0x05</span>
<a name="l00377"></a>00377 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_DNS 0x06</span>
<a name="l00378"></a>00378 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_LOGSERV 0x07</span>
<a name="l00379"></a>00379 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_COOKIESERV 0x08</span>
<a name="l00380"></a>00380 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_LPRSERV 0x09</span>
<a name="l00381"></a>00381 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_IMPSERV 0x0a</span>
<a name="l00382"></a>00382 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_RESSERV 0x0b</span>
<a name="l00383"></a>00383 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_HOSTNAME 0x0c</span>
<a name="l00384"></a>00384 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_BOOTFILESIZE 0x0d</span>
<a name="l00385"></a>00385 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_DUMPFILE 0x0e</span>
<a name="l00386"></a>00386 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_DOMAINNAME 0x0f</span>
<a name="l00387"></a>00387 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_SWAPSERV 0x10</span>
<a name="l00388"></a>00388 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_ROOTPATH 0x11</span>
<a name="l00389"></a>00389 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_EXTENPATH 0x12</span>
<a name="l00390"></a>00390 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_IPFORWARD 0x13</span>
<a name="l00391"></a>00391 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_SRCROUTE 0x14</span>
<a name="l00392"></a>00392 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_POLICYFILTER 0x15</span>
<a name="l00393"></a>00393 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_MAXASMSIZE 0x16</span>
<a name="l00394"></a>00394 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_IPTTL 0x17</span>
<a name="l00395"></a>00395 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_MTUTIMEOUT 0x18</span>
<a name="l00396"></a>00396 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_MTUTABLE 0x19</span>
<a name="l00397"></a>00397 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_MTUSIZE 0x1a</span>
<a name="l00398"></a>00398 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_LOCALSUBNETS 0x1b</span>
<a name="l00399"></a>00399 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_BROADCASTADDR 0x1c</span>
<a name="l00400"></a>00400 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_DOMASKDISCOV 0x1d</span>
<a name="l00401"></a>00401 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_MASKSUPPLY 0x1e</span>
<a name="l00402"></a>00402 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_DOROUTEDISC 0x1f</span>
<a name="l00403"></a>00403 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_ROUTERSOLICIT 0x20</span>
<a name="l00404"></a>00404 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_STATICROUTE 0x21</span>
<a name="l00405"></a>00405 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_TRAILERENCAP 0x22</span>
<a name="l00406"></a>00406 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_ARPTIMEOUT 0x23</span>
<a name="l00407"></a>00407 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_ETHERENCAP 0x24</span>
<a name="l00408"></a>00408 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_TCPTTL 0x25</span>
<a name="l00409"></a>00409 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_TCPKEEPALIVE 0x26</span>
<a name="l00410"></a>00410 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_TCPALIVEGARBAGE 0x27</span>
<a name="l00411"></a>00411 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_NISDOMAIN 0x28</span>
<a name="l00412"></a>00412 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_NISSERVERS 0x29</span>
<a name="l00413"></a>00413 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_NISTIMESERV 0x2a</span>
<a name="l00414"></a>00414 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_VENDSPECIFIC 0x2b</span>
<a name="l00415"></a>00415 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_NBNS 0x2c</span>
<a name="l00416"></a>00416 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_NBDD 0x2d</span>
<a name="l00417"></a>00417 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_NBTCPIP 0x2e</span>
<a name="l00418"></a>00418 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_NBTCPSCOPE 0x2f</span>
<a name="l00419"></a>00419 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_XFONT 0x30</span>
<a name="l00420"></a>00420 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_XDISPLAYMGR 0x31</span>
<a name="l00421"></a>00421 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_DISCOVERADDR 0x32</span>
<a name="l00422"></a>00422 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_LEASETIME 0x33</span>
<a name="l00423"></a>00423 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_OPTIONOVERLOAD 0x34</span>
<a name="l00424"></a>00424 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_MESSAGETYPE 0x35</span>
<a name="l00425"></a>00425 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_SERVIDENT 0x36</span>
<a name="l00426"></a>00426 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_PARAMREQUEST 0x37</span>
<a name="l00427"></a>00427 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_MESSAGE 0x38</span>
<a name="l00428"></a>00428 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_MAXMSGSIZE 0x39</span>
<a name="l00429"></a>00429 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_RENEWTIME 0x3a</span>
<a name="l00430"></a>00430 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_REBINDTIME 0x3b</span>
<a name="l00431"></a>00431 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_CLASSSID 0x3c</span>
<a name="l00432"></a>00432 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_CLIENTID 0x3d</span>
<a name="l00433"></a>00433 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_NISPLUSDOMAIN 0x40</span>
<a name="l00434"></a>00434 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_NISPLUSSERVERS 0x41</span>
<a name="l00435"></a>00435 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_MOBILEIPAGENT 0x44</span>
<a name="l00436"></a>00436 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_SMTPSERVER 0x45</span>
<a name="l00437"></a>00437 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_POP3SERVER 0x46</span>
<a name="l00438"></a>00438 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_NNTPSERVER 0x47</span>
<a name="l00439"></a>00439 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_WWWSERVER 0x48</span>
<a name="l00440"></a>00440 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_FINGERSERVER 0x49</span>
<a name="l00441"></a>00441 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_IRCSERVER 0x4a</span>
<a name="l00442"></a>00442 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_STSERVER 0x4b</span>
<a name="l00443"></a>00443 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_STDASERVER 0x4c</span>
<a name="l00444"></a>00444 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_END 0xff</span>
<a name="l00445"></a>00445 <span class="preprocessor"></span>
<a name="l00446"></a>00446 <span class="preprocessor">#define LIBNET_DHCP_MSGDISCOVER 0x01</span>
<a name="l00447"></a>00447 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_MSGOFFER 0x02</span>
<a name="l00448"></a>00448 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_MSGREQUEST 0x03</span>
<a name="l00449"></a>00449 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_MSGDECLINE 0x04</span>
<a name="l00450"></a>00450 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_MSGACK 0x05</span>
<a name="l00451"></a>00451 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_MSGNACK 0x06</span>
<a name="l00452"></a>00452 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_MSGRELEASE 0x07</span>
<a name="l00453"></a>00453 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_DHCP_MSGINFORM 0x08</span>
<a name="l00454"></a>00454 <span class="preprocessor"></span>};
<a name="l00455"></a>00455
<a name="l00456"></a>00456
<a name="l00457"></a>00457 <span class="comment">/* this little guy got left out in the cold */</span>
<a name="l00458"></a>00458 <span class="preprocessor">#define LIBNET_DNS_H LIBNET_UDP_DNSV4_H</span>
<a name="l00459"></a>00459 <span class="preprocessor"></span><span class="comment">/*</span>
<a name="l00460"></a>00460 <span class="comment"> * Base DNSv4 header</span>
<a name="l00461"></a>00461 <span class="comment"> * Domain Name System</span>
<a name="l00462"></a>00462 <span class="comment"> * Base header size: 12/14 bytes</span>
<a name="l00463"></a>00463 <span class="comment"> */</span>
<a name="l00464"></a>00464 <span class="keyword">struct </span>libnet_dnsv4_hdr
<a name="l00465"></a>00465 {
<a name="l00466"></a>00466 u_int16_t h_len; <span class="comment">/* length of the packet - only used with TCP */</span>
<a name="l00467"></a>00467 u_int16_t id; <span class="comment">/* DNS packet ID */</span>
<a name="l00468"></a>00468 u_int16_t flags; <span class="comment">/* DNS flags */</span>
<a name="l00469"></a>00469 u_int16_t num_q; <span class="comment">/* Number of questions */</span>
<a name="l00470"></a>00470 u_int16_t num_answ_rr; <span class="comment">/* Number of answer resource records */</span>
<a name="l00471"></a>00471 u_int16_t num_auth_rr; <span class="comment">/* Number of authority resource records */</span>
<a name="l00472"></a>00472 u_int16_t num_addi_rr; <span class="comment">/* Number of additional resource records */</span>
<a name="l00473"></a>00473 };
<a name="l00474"></a>00474
<a name="l00475"></a>00475 <span class="preprocessor">#define LIBNET_DNS_H LIBNET_UDP_DNSV4_H</span>
<a name="l00476"></a>00476 <span class="preprocessor"></span><span class="keyword">struct </span>libnet_dnsv4udp_hdr
<a name="l00477"></a>00477 {
<a name="l00478"></a>00478 u_int16_t id; <span class="comment">/* DNS packet ID */</span>
<a name="l00479"></a>00479 u_int16_t flags; <span class="comment">/* DNS flags */</span>
<a name="l00480"></a>00480 u_int16_t num_q; <span class="comment">/* Number of questions */</span>
<a name="l00481"></a>00481 u_int16_t num_answ_rr; <span class="comment">/* Number of answer resource records */</span>
<a name="l00482"></a>00482 u_int16_t num_auth_rr; <span class="comment">/* Number of authority resource records */</span>
<a name="l00483"></a>00483 u_int16_t num_addi_rr; <span class="comment">/* Number of additional resource records */</span>
<a name="l00484"></a>00484 };
<a name="l00485"></a>00485
<a name="l00486"></a>00486 <span class="comment">/*</span>
<a name="l00487"></a>00487 <span class="comment"> * Ethernet II header</span>
<a name="l00488"></a>00488 <span class="comment"> * Static header size: 14 bytes</span>
<a name="l00489"></a>00489 <span class="comment"> */</span>
<a name="l00490"></a>00490 <span class="keyword">struct </span>libnet_ethernet_hdr
<a name="l00491"></a>00491 {
<a name="l00492"></a>00492 u_int8_t ether_dhost[ETHER_ADDR_LEN];<span class="comment">/* destination ethernet address */</span>
<a name="l00493"></a>00493 u_int8_t ether_shost[ETHER_ADDR_LEN];<span class="comment">/* source ethernet address */</span>
<a name="l00494"></a>00494 u_int16_t ether_type; <span class="comment">/* protocol */</span>
<a name="l00495"></a>00495 };
<a name="l00496"></a>00496
<a name="l00497"></a>00497 <span class="preprocessor">#ifndef ETHERTYPE_PUP</span>
<a name="l00498"></a>00498 <span class="preprocessor"></span><span class="preprocessor">#define ETHERTYPE_PUP 0x0200 </span><span class="comment">/* PUP protocol */</span>
<a name="l00499"></a>00499 <span class="preprocessor">#endif</span>
<a name="l00500"></a>00500 <span class="preprocessor"></span><span class="preprocessor">#ifndef ETHERTYPE_IP</span>
<a name="l00501"></a>00501 <span class="preprocessor"></span><span class="preprocessor">#define ETHERTYPE_IP 0x0800 </span><span class="comment">/* IP protocol */</span>
<a name="l00502"></a>00502 <span class="preprocessor">#endif</span>
<a name="l00503"></a>00503 <span class="preprocessor"></span><span class="preprocessor">#ifndef ETHERTYPE_ARP</span>
<a name="l00504"></a>00504 <span class="preprocessor"></span><span class="preprocessor">#define ETHERTYPE_ARP 0x0806 </span><span class="comment">/* addr. resolution protocol */</span>
<a name="l00505"></a>00505 <span class="preprocessor">#endif</span>
<a name="l00506"></a>00506 <span class="preprocessor"></span><span class="preprocessor">#ifndef ETHERTYPE_REVARP</span>
<a name="l00507"></a>00507 <span class="preprocessor"></span><span class="preprocessor">#define ETHERTYPE_REVARP 0x8035 </span><span class="comment">/* reverse addr. resolution protocol */</span>
<a name="l00508"></a>00508 <span class="preprocessor">#endif</span>
<a name="l00509"></a>00509 <span class="preprocessor"></span><span class="preprocessor">#ifndef ETHERTYPE_VLAN</span>
<a name="l00510"></a>00510 <span class="preprocessor"></span><span class="preprocessor">#define ETHERTYPE_VLAN 0x8100 </span><span class="comment">/* IEEE 802.1Q VLAN tagging */</span>
<a name="l00511"></a>00511 <span class="preprocessor">#endif</span>
<a name="l00512"></a>00512 <span class="preprocessor"></span><span class="preprocessor">#ifndef ETHERTYPE_EAP</span>
<a name="l00513"></a>00513 <span class="preprocessor"></span><span class="preprocessor">#define ETHERTYPE_EAP 0x888e </span><span class="comment">/* IEEE 802.1X EAP authentication */</span>
<a name="l00514"></a>00514 <span class="preprocessor">#endif</span>
<a name="l00515"></a>00515 <span class="preprocessor"></span><span class="preprocessor">#ifndef ETHERTYPE_MPLS</span>
<a name="l00516"></a>00516 <span class="preprocessor"></span><span class="preprocessor">#define ETHERTYPE_MPLS 0x8847 </span><span class="comment">/* MPLS */</span>
<a name="l00517"></a>00517 <span class="preprocessor">#endif</span>
<a name="l00518"></a>00518 <span class="preprocessor"></span><span class="preprocessor">#ifndef ETHERTYPE_LOOPBACK</span>
<a name="l00519"></a>00519 <span class="preprocessor"></span><span class="preprocessor">#define ETHERTYPE_LOOPBACK 0x9000 </span><span class="comment">/* used to test interfaces */</span>
<a name="l00520"></a>00520 <span class="preprocessor">#endif</span>
<a name="l00521"></a>00521 <span class="preprocessor"></span>
<a name="l00522"></a>00522 <span class="keyword">struct </span>libnet_ether_addr
<a name="l00523"></a>00523 {
<a name="l00524"></a>00524 u_int8_t ether_addr_octet[6]; <span class="comment">/* Ethernet address */</span>
<a name="l00525"></a>00525 };
<a name="l00526"></a>00526
<a name="l00527"></a>00527 <span class="comment">/*</span>
<a name="l00528"></a>00528 <span class="comment"> * Fiber Distributed Data Interface header</span>
<a name="l00529"></a>00529 <span class="comment"> *</span>
<a name="l00530"></a>00530 <span class="comment"> * Static header size: 21 bytes (LLC and 48-bit address addr only)</span>
<a name="l00531"></a>00531 <span class="comment"> *</span>
<a name="l00532"></a>00532 <span class="comment"> * Note: Organization field is 3 bytes which throws off the</span>
<a name="l00533"></a>00533 <span class="comment"> * alignment of type. Therefore fddi_type (19 bytes in) </span>
<a name="l00534"></a>00534 <span class="comment"> * is specified as two u_int8_ts.</span>
<a name="l00535"></a>00535 <span class="comment"> */</span>
<a name="l00536"></a>00536 <span class="keyword">struct </span>libnet_fddi_hdr
<a name="l00537"></a>00537 {
<a name="l00538"></a>00538 u_int8_t fddi_frame_control; <span class="comment">/* Class/Format/Priority */</span>
<a name="l00539"></a>00539 <span class="preprocessor">#define LIBNET_FDDI_LLC_FRAME 0x10</span>
<a name="l00540"></a>00540 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_FDDI_48BIT_ADDR 0x40</span>
<a name="l00541"></a>00541 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_FDDI_FC_REQD LIBNET_FDDI_LLC_FRAME | LIBNET_FDDI_48BIT_ADDR </span>
<a name="l00542"></a>00542 <span class="preprocessor"></span> u_int8_t fddi_dhost[FDDI_ADDR_LEN]; <span class="comment">/* destination fddi address */</span>
<a name="l00543"></a>00543 u_int8_t fddi_shost[FDDI_ADDR_LEN]; <span class="comment">/* source fddi address */</span>
<a name="l00544"></a>00544 u_int8_t fddi_llc_dsap; <span class="comment">/* DSAP */</span>
<a name="l00545"></a>00545 u_int8_t fddi_llc_ssap; <span class="comment">/* SSAP */</span>
<a name="l00546"></a>00546 u_int8_t fddi_llc_control_field; <span class="comment">/* Class/Format/Priority */</span>
<a name="l00547"></a>00547 u_int8_t fddi_llc_org_code[LIBNET_ORG_CODE_SIZE]; <span class="comment">/* Organization Code 3-bytes */</span>
<a name="l00548"></a>00548 u_int8_t fddi_type; <span class="comment">/* Protocol Type */</span>
<a name="l00549"></a>00549 u_int8_t fddi_type1; <span class="comment">/* see note above. */</span>
<a name="l00550"></a>00550 <span class="preprocessor">#define FDDI_TYPE_IP 0x0800 </span><span class="comment">/* IP protocol */</span>
<a name="l00551"></a>00551 <span class="preprocessor">#define FDDI_TYPE_ARP 0x0806 </span><span class="comment">/* addr. resolution protocol */</span>
<a name="l00552"></a>00552 <span class="preprocessor">#define FDDI_TYPE_REVARP 0x8035 </span><span class="comment">/* reverse addr. resolution protocol */</span>
<a name="l00553"></a>00553 };
<a name="l00554"></a>00554
<a name="l00555"></a>00555
<a name="l00556"></a>00556 <span class="keyword">struct </span>libnet_fddi_addr
<a name="l00557"></a>00557 {
<a name="l00558"></a>00558 u_int8_t fddi_addr_octet[6]; <span class="comment">/* FDDI address */</span>
<a name="l00559"></a>00559 };
<a name="l00560"></a>00560
<a name="l00561"></a>00561
<a name="l00562"></a>00562 <span class="comment">/*</span>
<a name="l00563"></a>00563 <span class="comment"> * GRE header - RFC 1701 & 2637</span>
<a name="l00564"></a>00564 <span class="comment"> * Generic Routing Encapsulation (GRE) </span>
<a name="l00565"></a>00565 <span class="comment"> * Base header size: 4 bytes</span>
<a name="l00566"></a>00566 <span class="comment"> */</span>
<a name="l00567"></a>00567 <span class="keyword">struct </span>libnet_gre_hdr
<a name="l00568"></a>00568 {
<a name="l00569"></a>00569 u_int16_t flags_ver;
<a name="l00570"></a>00570 <span class="preprocessor">#define GRE_CSUM 0x8000</span>
<a name="l00571"></a>00571 <span class="preprocessor"></span><span class="preprocessor">#define GRE_ROUTING 0x4000</span>
<a name="l00572"></a>00572 <span class="preprocessor"></span><span class="preprocessor">#define GRE_KEY 0x2000</span>
<a name="l00573"></a>00573 <span class="preprocessor"></span><span class="preprocessor">#define GRE_SEQ 0x1000</span>
<a name="l00574"></a>00574 <span class="preprocessor"></span><span class="preprocessor">#define GRE_STRICT 0x0800</span>
<a name="l00575"></a>00575 <span class="preprocessor"></span><span class="preprocessor">#define GRE_REC 0x0700</span>
<a name="l00576"></a>00576 <span class="preprocessor"></span><span class="preprocessor">#define GRE_ACK 0x0080</span>
<a name="l00577"></a>00577 <span class="preprocessor"></span>
<a name="l00578"></a>00578 <span class="preprocessor">#define GRE_FLAGS_MASK 0x00F8</span>
<a name="l00579"></a>00579 <span class="preprocessor"></span><span class="preprocessor">#define GRE_VERSION_MASK 0x0007</span>
<a name="l00580"></a>00580 <span class="preprocessor"></span>
<a name="l00581"></a>00581 <span class="preprocessor">#define GRE_VERSION_0 0x0000</span>
<a name="l00582"></a>00582 <span class="preprocessor"></span><span class="preprocessor">#define GRE_VERSION_1 0x0001</span>
<a name="l00583"></a>00583 <span class="preprocessor"></span>
<a name="l00584"></a>00584 u_int16_t type;
<a name="l00585"></a>00585 <span class="preprocessor">#define GRE_SNA 0x0004</span>
<a name="l00586"></a>00586 <span class="preprocessor"></span><span class="preprocessor">#define GRE_OSI_NETWORK_LAYER 0x00FE</span>
<a name="l00587"></a>00587 <span class="preprocessor"></span><span class="preprocessor">#define GRE_PUP 0x0200</span>
<a name="l00588"></a>00588 <span class="preprocessor"></span><span class="preprocessor">#define GRE_XNS 0x0600</span>
<a name="l00589"></a>00589 <span class="preprocessor"></span><span class="preprocessor">#define GRE_IP 0x0800</span>
<a name="l00590"></a>00590 <span class="preprocessor"></span><span class="preprocessor">#define GRE_CHAOS 0x0804</span>
<a name="l00591"></a>00591 <span class="preprocessor"></span><span class="preprocessor">#define GRE_RFC_826_ARP 0x0806</span>
<a name="l00592"></a>00592 <span class="preprocessor"></span><span class="preprocessor">#define GRE_FRAME_RELAY_ARP 0x0808</span>
<a name="l00593"></a>00593 <span class="preprocessor"></span><span class="preprocessor">#define GRE_VINES 0x0BAD</span>
<a name="l00594"></a>00594 <span class="preprocessor"></span><span class="preprocessor">#define GRE_VINES_ECHO 0x0BAE</span>
<a name="l00595"></a>00595 <span class="preprocessor"></span><span class="preprocessor">#define GRE_VINES_LOOPBACK 0x0BAF</span>
<a name="l00596"></a>00596 <span class="preprocessor"></span><span class="preprocessor">#define GRE_DECNET 0x6003</span>
<a name="l00597"></a>00597 <span class="preprocessor"></span><span class="preprocessor">#define GRE_TRANSPARENT_ETHERNET_BRIDGING 0x6558</span>
<a name="l00598"></a>00598 <span class="preprocessor"></span><span class="preprocessor">#define GRE_RAW_FRAME_RELAY 0x6559</span>
<a name="l00599"></a>00599 <span class="preprocessor"></span><span class="preprocessor">#define GRE_APOLLO_DOMAIN 0x8019</span>
<a name="l00600"></a>00600 <span class="preprocessor"></span><span class="preprocessor">#define GRE_ETHERTALK 0x809B</span>
<a name="l00601"></a>00601 <span class="preprocessor"></span><span class="preprocessor">#define GRE_NOVELL_IPX 0x8137</span>
<a name="l00602"></a>00602 <span class="preprocessor"></span><span class="preprocessor">#define GRE_RFC_1144_TCP_IP_COMPRESSION 0x876B</span>
<a name="l00603"></a>00603 <span class="preprocessor"></span><span class="preprocessor">#define GRE_IP_AUTONOMOUS_SYSTEMS 0x876C</span>
<a name="l00604"></a>00604 <span class="preprocessor"></span><span class="preprocessor">#define GRE_SECURE_DATA 0x876D</span>
<a name="l00605"></a>00605 <span class="preprocessor"></span><span class="preprocessor">#define GRE_PPP 0x880b </span><span class="comment">/* taken from RFC 2637 */</span>
<a name="l00606"></a>00606
<a name="l00607"></a>00607 <span class="keyword">union </span>{
<a name="l00608"></a>00608 <span class="keyword">struct </span>{
<a name="l00609"></a>00609 u_int16_t sum; <span class="comment">/* optional */</span>
<a name="l00610"></a>00610 u_int16_t offset; <span class="comment">/* optional */</span>
<a name="l00611"></a>00611 u_int32_t key; <span class="comment">/* optional */</span>
<a name="l00612"></a>00612 u_int32_t seq; <span class="comment">/* optional */</span>
<a name="l00613"></a>00613 } _gre;
<a name="l00614"></a>00614
<a name="l00615"></a>00615 <span class="keyword">struct </span>{
<a name="l00616"></a>00616 u_int16_t payload_s; <span class="comment">/* optional */</span>
<a name="l00617"></a>00617 u_int16_t callID; <span class="comment">/* optional */</span>
<a name="l00618"></a>00618 u_int32_t seq; <span class="comment">/* optional */</span>
<a name="l00619"></a>00619 u_int32_t ack; <span class="comment">/* optional */</span>
<a name="l00620"></a>00620 } _egre;
<a name="l00621"></a>00621 }_data;
<a name="l00622"></a>00622
<a name="l00623"></a>00623 <span class="preprocessor">#define gre_sum _data._gre.sum</span>
<a name="l00624"></a>00624 <span class="preprocessor"></span><span class="preprocessor">#define gre_offset _data._gre.offset</span>
<a name="l00625"></a>00625 <span class="preprocessor"></span><span class="preprocessor">#define gre_key _data._gre.key</span>
<a name="l00626"></a>00626 <span class="preprocessor"></span><span class="preprocessor">#define gre_seq _data._gre.seq</span>
<a name="l00627"></a>00627 <span class="preprocessor"></span>
<a name="l00628"></a>00628 <span class="preprocessor">#define egre_payload_s _data._egre.payload_s</span>
<a name="l00629"></a>00629 <span class="preprocessor"></span><span class="preprocessor">#define egre_callID _data._egre.callID</span>
<a name="l00630"></a>00630 <span class="preprocessor"></span><span class="preprocessor">#define egre_seq _data._egre.seq</span>
<a name="l00631"></a>00631 <span class="preprocessor"></span><span class="preprocessor">#define egre_ack _data._egre.ack</span>
<a name="l00632"></a>00632 <span class="preprocessor"></span>};
<a name="l00633"></a>00633
<a name="l00634"></a>00634
<a name="l00635"></a>00635 <span class="preprocessor">#ifndef IPPROTO_GRE</span>
<a name="l00636"></a>00636 <span class="preprocessor"></span><span class="preprocessor">#define IPPROTO_GRE 47</span>
<a name="l00637"></a>00637 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00638"></a>00638 <span class="preprocessor"></span>
<a name="l00639"></a>00639 <span class="comment">/*</span>
<a name="l00640"></a>00640 <span class="comment"> * Source Route Entries (SRE)</span>
<a name="l00641"></a>00641 <span class="comment"> * This is used for GRE as the Routing field is a list of SREs - RFC 1701</span>
<a name="l00642"></a>00642 <span class="comment"> * Base header size: 4 bytes</span>
<a name="l00643"></a>00643 <span class="comment"> */</span>
<a name="l00644"></a>00644 <span class="keyword">struct </span>libnet_gre_sre_hdr
<a name="l00645"></a>00645 {
<a name="l00646"></a>00646 u_int16_t af; <span class="comment">/* address familly */</span>
<a name="l00647"></a>00647 u_int8_t sre_offset;
<a name="l00648"></a>00648 u_int8_t sre_length;
<a name="l00649"></a>00649 u_int8_t *routing;
<a name="l00650"></a>00650 };
<a name="l00651"></a>00651
<a name="l00652"></a>00652
<a name="l00653"></a>00653 <span class="comment">/*</span>
<a name="l00654"></a>00654 <span class="comment"> * IPv4 header</span>
<a name="l00655"></a>00655 <span class="comment"> * Internet Protocol, version 4</span>
<a name="l00656"></a>00656 <span class="comment"> * Static header size: 20 bytes</span>
<a name="l00657"></a>00657 <span class="comment"> */</span>
<a name="l00658"></a>00658 <span class="keyword">struct </span>libnet_ipv4_hdr
<a name="l00659"></a>00659 {
<a name="l00660"></a>00660 <span class="preprocessor">#if (LIBNET_LIL_ENDIAN)</span>
<a name="l00661"></a>00661 <span class="preprocessor"></span> u_int8_t ip_hl:4, <span class="comment">/* header length */</span>
<a name="l00662"></a>00662 ip_v:4; <span class="comment">/* version */</span>
<a name="l00663"></a>00663 <span class="preprocessor">#endif</span>
<a name="l00664"></a>00664 <span class="preprocessor"></span><span class="preprocessor">#if (LIBNET_BIG_ENDIAN)</span>
<a name="l00665"></a>00665 <span class="preprocessor"></span> u_int8_t ip_v:4, <span class="comment">/* version */</span>
<a name="l00666"></a>00666 ip_hl:4; <span class="comment">/* header length */</span>
<a name="l00667"></a>00667 <span class="preprocessor">#endif</span>
<a name="l00668"></a>00668 <span class="preprocessor"></span> u_int8_t ip_tos; <span class="comment">/* type of service */</span>
<a name="l00669"></a>00669 <span class="preprocessor">#ifndef IPTOS_LOWDELAY</span>
<a name="l00670"></a>00670 <span class="preprocessor"></span><span class="preprocessor">#define IPTOS_LOWDELAY 0x10</span>
<a name="l00671"></a>00671 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00672"></a>00672 <span class="preprocessor"></span><span class="preprocessor">#ifndef IPTOS_THROUGHPUT</span>
<a name="l00673"></a>00673 <span class="preprocessor"></span><span class="preprocessor">#define IPTOS_THROUGHPUT 0x08</span>
<a name="l00674"></a>00674 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00675"></a>00675 <span class="preprocessor"></span><span class="preprocessor">#ifndef IPTOS_RELIABILITY</span>
<a name="l00676"></a>00676 <span class="preprocessor"></span><span class="preprocessor">#define IPTOS_RELIABILITY 0x04</span>
<a name="l00677"></a>00677 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00678"></a>00678 <span class="preprocessor"></span><span class="preprocessor">#ifndef IPTOS_LOWCOST</span>
<a name="l00679"></a>00679 <span class="preprocessor"></span><span class="preprocessor">#define IPTOS_LOWCOST 0x02</span>
<a name="l00680"></a>00680 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00681"></a>00681 <span class="preprocessor"></span> u_int16_t ip_len; <span class="comment">/* total length */</span>
<a name="l00682"></a>00682 u_int16_t ip_id; <span class="comment">/* identification */</span>
<a name="l00683"></a>00683 u_int16_t ip_off;
<a name="l00684"></a>00684 <span class="preprocessor">#ifndef IP_RF</span>
<a name="l00685"></a>00685 <span class="preprocessor"></span><span class="preprocessor">#define IP_RF 0x8000 </span><span class="comment">/* reserved fragment flag */</span>
<a name="l00686"></a>00686 <span class="preprocessor">#endif</span>
<a name="l00687"></a>00687 <span class="preprocessor"></span><span class="preprocessor">#ifndef IP_DF</span>
<a name="l00688"></a>00688 <span class="preprocessor"></span><span class="preprocessor">#define IP_DF 0x4000 </span><span class="comment">/* dont fragment flag */</span>
<a name="l00689"></a>00689 <span class="preprocessor">#endif</span>
<a name="l00690"></a>00690 <span class="preprocessor"></span><span class="preprocessor">#ifndef IP_MF</span>
<a name="l00691"></a>00691 <span class="preprocessor"></span><span class="preprocessor">#define IP_MF 0x2000 </span><span class="comment">/* more fragments flag */</span>
<a name="l00692"></a>00692 <span class="preprocessor">#endif </span>
<a name="l00693"></a>00693 <span class="preprocessor"></span><span class="preprocessor">#ifndef IP_OFFMASK</span>
<a name="l00694"></a>00694 <span class="preprocessor"></span><span class="preprocessor">#define IP_OFFMASK 0x1fff </span><span class="comment">/* mask for fragmenting bits */</span>
<a name="l00695"></a>00695 <span class="preprocessor">#endif</span>
<a name="l00696"></a>00696 <span class="preprocessor"></span> u_int8_t ip_ttl; <span class="comment">/* time to live */</span>
<a name="l00697"></a>00697 u_int8_t ip_p; <span class="comment">/* protocol */</span>
<a name="l00698"></a>00698 u_int16_t ip_sum; <span class="comment">/* checksum */</span>
<a name="l00699"></a>00699 <span class="keyword">struct </span>in_addr ip_src, ip_dst; <span class="comment">/* source and dest address */</span>
<a name="l00700"></a>00700 };
<a name="l00701"></a>00701
<a name="l00702"></a>00702 <span class="comment">/*</span>
<a name="l00703"></a>00703 <span class="comment"> * IP options</span>
<a name="l00704"></a>00704 <span class="comment"> */</span>
<a name="l00705"></a>00705 <span class="preprocessor">#ifndef IPOPT_EOL</span>
<a name="l00706"></a>00706 <span class="preprocessor"></span><span class="preprocessor">#define IPOPT_EOL 0 </span><span class="comment">/* end of option list */</span>
<a name="l00707"></a>00707 <span class="preprocessor">#endif</span>
<a name="l00708"></a>00708 <span class="preprocessor"></span><span class="preprocessor">#ifndef IPOPT_NOP</span>
<a name="l00709"></a>00709 <span class="preprocessor"></span><span class="preprocessor">#define IPOPT_NOP 1 </span><span class="comment">/* no operation */</span>
<a name="l00710"></a>00710 <span class="preprocessor">#endif </span>
<a name="l00711"></a>00711 <span class="preprocessor"></span><span class="preprocessor">#ifndef IPOPT_RR</span>
<a name="l00712"></a>00712 <span class="preprocessor"></span><span class="preprocessor">#define IPOPT_RR 7 </span><span class="comment">/* record packet route */</span>
<a name="l00713"></a>00713 <span class="preprocessor">#endif</span>
<a name="l00714"></a>00714 <span class="preprocessor"></span><span class="preprocessor">#ifndef IPOPT_TS</span>
<a name="l00715"></a>00715 <span class="preprocessor"></span><span class="preprocessor">#define IPOPT_TS 68 </span><span class="comment">/* timestamp */</span>
<a name="l00716"></a>00716 <span class="preprocessor">#endif</span>
<a name="l00717"></a>00717 <span class="preprocessor"></span><span class="preprocessor">#ifndef IPOPT_SECURITY</span>
<a name="l00718"></a>00718 <span class="preprocessor"></span><span class="preprocessor">#define IPOPT_SECURITY 130 </span><span class="comment">/* provide s,c,h,tcc */</span>
<a name="l00719"></a>00719 <span class="preprocessor">#endif</span>
<a name="l00720"></a>00720 <span class="preprocessor"></span><span class="preprocessor">#ifndef IPOPT_LSRR</span>
<a name="l00721"></a>00721 <span class="preprocessor"></span><span class="preprocessor">#define IPOPT_LSRR 131 </span><span class="comment">/* loose source route */</span>
<a name="l00722"></a>00722 <span class="preprocessor">#endif</span>
<a name="l00723"></a>00723 <span class="preprocessor"></span><span class="preprocessor">#ifndef IPOPT_SATID</span>
<a name="l00724"></a>00724 <span class="preprocessor"></span><span class="preprocessor">#define IPOPT_SATID 136 </span><span class="comment">/* satnet id */</span>
<a name="l00725"></a>00725 <span class="preprocessor">#endif</span>
<a name="l00726"></a>00726 <span class="preprocessor"></span><span class="preprocessor">#ifndef IPOPT_SSRR</span>
<a name="l00727"></a>00727 <span class="preprocessor"></span><span class="preprocessor">#define IPOPT_SSRR 137 </span><span class="comment">/* strict source route */</span>
<a name="l00728"></a>00728 <span class="preprocessor">#endif</span>
<a name="l00729"></a>00729 <span class="preprocessor"></span>
<a name="l00730"></a>00730 <span class="comment">/*</span>
<a name="l00731"></a>00731 <span class="comment"> * IPv6 address</span>
<a name="l00732"></a>00732 <span class="comment"> */</span>
<a name="l00733"></a>00733 <span class="keyword">struct </span>libnet_in6_addr
<a name="l00734"></a>00734 {
<a name="l00735"></a>00735 <span class="keyword">union</span>
<a name="l00736"></a>00736 {
<a name="l00737"></a>00737 u_int8_t __u6_addr8[16];
<a name="l00738"></a>00738 u_int16_t __u6_addr16[8];
<a name="l00739"></a>00739 u_int32_t __u6_addr32[4];
<a name="l00740"></a>00740 } __u6_addr; <span class="comment">/* 128-bit IP6 address */</span>
<a name="l00741"></a>00741 };
<a name="l00742"></a>00742 <span class="preprocessor">#define libnet_s6_addr __u6_addr.__u6_addr8</span>
<a name="l00743"></a>00743 <span class="preprocessor"></span>
<a name="l00744"></a>00744 <span class="comment">/*</span>
<a name="l00745"></a>00745 <span class="comment"> * IPv6 header</span>
<a name="l00746"></a>00746 <span class="comment"> * Internet Protocol, version 6</span>
<a name="l00747"></a>00747 <span class="comment"> * Static header size: 40 bytes</span>
<a name="l00748"></a>00748 <span class="comment"> */</span>
<a name="l00749"></a>00749 <span class="keyword">struct </span>libnet_ipv6_hdr
<a name="l00750"></a>00750 {
<a name="l00751"></a>00751 u_int8_t ip_flags[4]; <span class="comment">/* version, traffic class, flow label */</span>
<a name="l00752"></a>00752 u_int16_t ip_len; <span class="comment">/* total length */</span>
<a name="l00753"></a>00753 u_int8_t ip_nh; <span class="comment">/* next header */</span>
<a name="l00754"></a>00754 u_int8_t ip_hl; <span class="comment">/* hop limit */</span>
<a name="l00755"></a>00755 <span class="keyword">struct </span>libnet_in6_addr ip_src, ip_dst; <span class="comment">/* source and dest address */</span>
<a name="l00756"></a>00756
<a name="l00757"></a>00757 };
<a name="l00758"></a>00758
<a name="l00759"></a>00759 <span class="comment">/*</span>
<a name="l00760"></a>00760 <span class="comment"> * IPv6 frag header</span>
<a name="l00761"></a>00761 <span class="comment"> * Internet Protocol, version 6</span>
<a name="l00762"></a>00762 <span class="comment"> * Static header size: 8 bytes</span>
<a name="l00763"></a>00763 <span class="comment"> */</span>
<a name="l00764"></a>00764 <span class="preprocessor">#define LIBNET_IPV6_NH_FRAGMENT 44</span>
<a name="l00765"></a>00765 <span class="preprocessor"></span><span class="keyword">struct </span>libnet_ipv6_frag_hdr
<a name="l00766"></a>00766 {
<a name="l00767"></a>00767 u_int8_t ip_nh; <span class="comment">/* next header */</span>
<a name="l00768"></a>00768 u_int8_t ip_reserved; <span class="comment">/* reserved */</span>
<a name="l00769"></a>00769 u_int16_t ip_frag; <span class="comment">/* fragmentation stuff */</span>
<a name="l00770"></a>00770 u_int32_t ip_id; <span class="comment">/* id */</span>
<a name="l00771"></a>00771 };
<a name="l00772"></a>00772
<a name="l00773"></a>00773 <span class="comment">/*</span>
<a name="l00774"></a>00774 <span class="comment"> * IPv6 routing header</span>
<a name="l00775"></a>00775 <span class="comment"> * Internet Protocol, version 6</span>
<a name="l00776"></a>00776 <span class="comment"> * Base header size: 4 bytes</span>
<a name="l00777"></a>00777 <span class="comment"> */</span>
<a name="l00778"></a>00778 <span class="preprocessor">#define LIBNET_IPV6_NH_ROUTING 43</span>
<a name="l00779"></a>00779 <span class="preprocessor"></span><span class="keyword">struct </span>libnet_ipv6_routing_hdr
<a name="l00780"></a>00780 {
<a name="l00781"></a>00781 u_int8_t ip_nh; <span class="comment">/* next header */</span>
<a name="l00782"></a>00782 u_int8_t ip_len; <span class="comment">/* length of header in 8 octet units (sans 1st) */</span>
<a name="l00783"></a>00783 u_int8_t ip_rtype; <span class="comment">/* routing type */</span>
<a name="l00784"></a>00784 u_int8_t ip_segments; <span class="comment">/* segments left */</span>
<a name="l00785"></a>00785 <span class="comment">/* routing information allocated dynamically */</span>
<a name="l00786"></a>00786 };
<a name="l00787"></a>00787
<a name="l00788"></a>00788 <span class="comment">/*</span>
<a name="l00789"></a>00789 <span class="comment"> * IPv6 destination options header</span>
<a name="l00790"></a>00790 <span class="comment"> * Internet Protocol, version 6</span>
<a name="l00791"></a>00791 <span class="comment"> * Base header size: 2 bytes</span>
<a name="l00792"></a>00792 <span class="comment"> */</span>
<a name="l00793"></a>00793 <span class="preprocessor">#define LIBNET_IPV6_NH_DESTOPTS 60</span>
<a name="l00794"></a>00794 <span class="preprocessor"></span><span class="keyword">struct </span>libnet_ipv6_destopts_hdr
<a name="l00795"></a>00795 {
<a name="l00796"></a>00796 u_int8_t ip_nh; <span class="comment">/* next header */</span>
<a name="l00797"></a>00797 u_int8_t ip_len; <span class="comment">/* length of header in 8 octet units (sans 1st) */</span>
<a name="l00798"></a>00798 <span class="comment">/* destination options information allocated dynamically */</span>
<a name="l00799"></a>00799 };
<a name="l00800"></a>00800
<a name="l00801"></a>00801 <span class="comment">/*</span>
<a name="l00802"></a>00802 <span class="comment"> * IPv6 hop by hop options header</span>
<a name="l00803"></a>00803 <span class="comment"> * Internet Protocol, version 6</span>
<a name="l00804"></a>00804 <span class="comment"> * Base header size: 2 bytes</span>
<a name="l00805"></a>00805 <span class="comment"> */</span>
<a name="l00806"></a>00806 <span class="preprocessor">#define LIBNET_IPV6_NH_HBH 0</span>
<a name="l00807"></a>00807 <span class="preprocessor"></span><span class="keyword">struct </span>libnet_ipv6_hbhopts_hdr
<a name="l00808"></a>00808 {
<a name="l00809"></a>00809 u_int8_t ip_nh; <span class="comment">/* next header */</span>
<a name="l00810"></a>00810 u_int8_t ip_len; <span class="comment">/* length of header in 8 octet units (sans 1st) */</span>
<a name="l00811"></a>00811 <span class="comment">/* destination options information allocated dynamically */</span>
<a name="l00812"></a>00812 };
<a name="l00813"></a>00813
<a name="l00814"></a>00814 <span class="comment">/*</span>
<a name="l00815"></a>00815 <span class="comment"> * ICMP6 header</span>
<a name="l00816"></a>00816 <span class="comment"> * Internet Control Message Protocol v6</span>
<a name="l00817"></a>00817 <span class="comment"> * Base header size: 8 bytes</span>
<a name="l00818"></a>00818 <span class="comment"> */</span>
<a name="l00819"></a>00819 <span class="preprocessor">#ifndef IPPROTO_ICMP6</span>
<a name="l00820"></a>00820 <span class="preprocessor"></span><span class="preprocessor">#define IPPROTO_ICMP6 0x3a</span>
<a name="l00821"></a>00821 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00822"></a>00822 <span class="preprocessor"></span><span class="keyword">struct </span>libnet_icmpv6_hdr
<a name="l00823"></a>00823 {
<a name="l00824"></a>00824 u_int8_t icmp_type; <span class="comment">/* ICMP type */</span>
<a name="l00825"></a>00825 <span class="preprocessor">#ifndef ICMP6_ECHO</span>
<a name="l00826"></a>00826 <span class="preprocessor"></span><span class="preprocessor">#define ICMP6_ECHO 128</span>
<a name="l00827"></a>00827 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00828"></a>00828 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP6_ECHOREPLY</span>
<a name="l00829"></a>00829 <span class="preprocessor"></span><span class="preprocessor">#define ICMP6_ECHOREPLY 129</span>
<a name="l00830"></a>00830 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00831"></a>00831 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP6_UNREACH</span>
<a name="l00832"></a>00832 <span class="preprocessor"></span><span class="preprocessor">#define ICMP6_UNREACH 1</span>
<a name="l00833"></a>00833 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00834"></a>00834 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP6_PKTTOOBIG</span>
<a name="l00835"></a>00835 <span class="preprocessor"></span><span class="preprocessor">#define ICMP6_PKTTOOBIG 2</span>
<a name="l00836"></a>00836 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00837"></a>00837 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP6_TIMXCEED</span>
<a name="l00838"></a>00838 <span class="preprocessor"></span><span class="preprocessor">#define ICMP6_TIMXCEED 3</span>
<a name="l00839"></a>00839 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00840"></a>00840 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP6_PARAMPROB</span>
<a name="l00841"></a>00841 <span class="preprocessor"></span><span class="preprocessor">#define ICMP6_PARAMPROB 4</span>
<a name="l00842"></a>00842 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00843"></a>00843 <span class="preprocessor"></span> u_int8_t icmp_code; <span class="comment">/* ICMP code */</span>
<a name="l00844"></a>00844 u_int16_t icmp_sum; <span class="comment">/* ICMP Checksum */</span>
<a name="l00845"></a>00845 u_int16_t id; <span class="comment">/* ICMP id */</span>
<a name="l00846"></a>00846 u_int16_t seq; <span class="comment">/* ICMP sequence number */</span>
<a name="l00847"></a>00847 };
<a name="l00848"></a>00848
<a name="l00849"></a>00849
<a name="l00850"></a>00850
<a name="l00851"></a>00851 <span class="comment">/*</span>
<a name="l00852"></a>00852 <span class="comment"> * ICMP header</span>
<a name="l00853"></a>00853 <span class="comment"> * Internet Control Message Protocol</span>
<a name="l00854"></a>00854 <span class="comment"> * Base header size: 4 bytes</span>
<a name="l00855"></a>00855 <span class="comment"> */</span>
<a name="l00856"></a>00856 <span class="keyword">struct </span>libnet_icmpv4_hdr
<a name="l00857"></a>00857 {
<a name="l00858"></a>00858 u_int8_t icmp_type; <span class="comment">/* ICMP type */</span>
<a name="l00859"></a>00859 <span class="preprocessor">#ifndef ICMP_ECHOREPLY</span>
<a name="l00860"></a>00860 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_ECHOREPLY 0</span>
<a name="l00861"></a>00861 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00862"></a>00862 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_UNREACH</span>
<a name="l00863"></a>00863 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_UNREACH 3</span>
<a name="l00864"></a>00864 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00865"></a>00865 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_SOURCEQUENCH</span>
<a name="l00866"></a>00866 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_SOURCEQUENCH 4</span>
<a name="l00867"></a>00867 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00868"></a>00868 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_REDIRECT</span>
<a name="l00869"></a>00869 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_REDIRECT 5</span>
<a name="l00870"></a>00870 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00871"></a>00871 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_ECHO</span>
<a name="l00872"></a>00872 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_ECHO 8</span>
<a name="l00873"></a>00873 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00874"></a>00874 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_ROUTERADVERT</span>
<a name="l00875"></a>00875 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_ROUTERADVERT 9</span>
<a name="l00876"></a>00876 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00877"></a>00877 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_ROUTERSOLICIT</span>
<a name="l00878"></a>00878 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_ROUTERSOLICIT 10</span>
<a name="l00879"></a>00879 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00880"></a>00880 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_TIMXCEED</span>
<a name="l00881"></a>00881 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_TIMXCEED 11</span>
<a name="l00882"></a>00882 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00883"></a>00883 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_PARAMPROB</span>
<a name="l00884"></a>00884 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_PARAMPROB 12</span>
<a name="l00885"></a>00885 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00886"></a>00886 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_TSTAMP</span>
<a name="l00887"></a>00887 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_TSTAMP 13</span>
<a name="l00888"></a>00888 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00889"></a>00889 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_TSTAMPREPLY</span>
<a name="l00890"></a>00890 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_TSTAMPREPLY 14</span>
<a name="l00891"></a>00891 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00892"></a>00892 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_IREQ</span>
<a name="l00893"></a>00893 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_IREQ 15</span>
<a name="l00894"></a>00894 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00895"></a>00895 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_IREQREPLY</span>
<a name="l00896"></a>00896 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_IREQREPLY 16</span>
<a name="l00897"></a>00897 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00898"></a>00898 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_MASKREQ</span>
<a name="l00899"></a>00899 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_MASKREQ 17</span>
<a name="l00900"></a>00900 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00901"></a>00901 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_MASKREPLY</span>
<a name="l00902"></a>00902 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_MASKREPLY 18</span>
<a name="l00903"></a>00903 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00904"></a>00904 <span class="preprocessor"></span> u_int8_t icmp_code; <span class="comment">/* ICMP code */</span>
<a name="l00905"></a>00905 <span class="preprocessor">#ifndef ICMP_UNREACH_NET</span>
<a name="l00906"></a>00906 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_UNREACH_NET 0</span>
<a name="l00907"></a>00907 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00908"></a>00908 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_UNREACH_HOST</span>
<a name="l00909"></a>00909 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_UNREACH_HOST 1</span>
<a name="l00910"></a>00910 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00911"></a>00911 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_UNREACH_PROTOCOL</span>
<a name="l00912"></a>00912 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_UNREACH_PROTOCOL 2</span>
<a name="l00913"></a>00913 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00914"></a>00914 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_UNREACH_PORT</span>
<a name="l00915"></a>00915 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_UNREACH_PORT 3</span>
<a name="l00916"></a>00916 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00917"></a>00917 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_UNREACH_NEEDFRAG</span>
<a name="l00918"></a>00918 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_UNREACH_NEEDFRAG 4</span>
<a name="l00919"></a>00919 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00920"></a>00920 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_UNREACH_SRCFAIL</span>
<a name="l00921"></a>00921 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_UNREACH_SRCFAIL 5</span>
<a name="l00922"></a>00922 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00923"></a>00923 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_UNREACH_NET_UNKNOWN</span>
<a name="l00924"></a>00924 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_UNREACH_NET_UNKNOWN 6</span>
<a name="l00925"></a>00925 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00926"></a>00926 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_UNREACH_HOST_UNKNOWN</span>
<a name="l00927"></a>00927 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_UNREACH_HOST_UNKNOWN 7</span>
<a name="l00928"></a>00928 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00929"></a>00929 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_UNREACH_ISOLATED</span>
<a name="l00930"></a>00930 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_UNREACH_ISOLATED 8</span>
<a name="l00931"></a>00931 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00932"></a>00932 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_UNREACH_NET_PROHIB</span>
<a name="l00933"></a>00933 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_UNREACH_NET_PROHIB 9</span>
<a name="l00934"></a>00934 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00935"></a>00935 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_UNREACH_HOST_PROHIB</span>
<a name="l00936"></a>00936 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_UNREACH_HOST_PROHIB 10</span>
<a name="l00937"></a>00937 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00938"></a>00938 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_UNREACH_TOSNET</span>
<a name="l00939"></a>00939 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_UNREACH_TOSNET 11</span>
<a name="l00940"></a>00940 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00941"></a>00941 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_UNREACH_TOSHOST</span>
<a name="l00942"></a>00942 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_UNREACH_TOSHOST 12</span>
<a name="l00943"></a>00943 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00944"></a>00944 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_UNREACH_FILTER_PROHIB</span>
<a name="l00945"></a>00945 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_UNREACH_FILTER_PROHIB 13</span>
<a name="l00946"></a>00946 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00947"></a>00947 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_UNREACH_HOST_PRECEDENCE</span>
<a name="l00948"></a>00948 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_UNREACH_HOST_PRECEDENCE 14</span>
<a name="l00949"></a>00949 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00950"></a>00950 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_UNREACH_PRECEDENCE_CUTOFF</span>
<a name="l00951"></a>00951 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_UNREACH_PRECEDENCE_CUTOFF 15</span>
<a name="l00952"></a>00952 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00953"></a>00953 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_REDIRECT_NET</span>
<a name="l00954"></a>00954 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_REDIRECT_NET 0</span>
<a name="l00955"></a>00955 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00956"></a>00956 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_REDIRECT_HOST</span>
<a name="l00957"></a>00957 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_REDIRECT_HOST 1</span>
<a name="l00958"></a>00958 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00959"></a>00959 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_REDIRECT_TOSNET</span>
<a name="l00960"></a>00960 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_REDIRECT_TOSNET 2</span>
<a name="l00961"></a>00961 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00962"></a>00962 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_REDIRECT_TOSHOST</span>
<a name="l00963"></a>00963 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_REDIRECT_TOSHOST 3</span>
<a name="l00964"></a>00964 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00965"></a>00965 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_TIMXCEED_INTRANS</span>
<a name="l00966"></a>00966 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_TIMXCEED_INTRANS 0</span>
<a name="l00967"></a>00967 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00968"></a>00968 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_TIMXCEED_REASS</span>
<a name="l00969"></a>00969 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_TIMXCEED_REASS 1</span>
<a name="l00970"></a>00970 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00971"></a>00971 <span class="preprocessor"></span><span class="preprocessor">#ifndef ICMP_PARAMPROB_OPTABSENT</span>
<a name="l00972"></a>00972 <span class="preprocessor"></span><span class="preprocessor">#define ICMP_PARAMPROB_OPTABSENT 1</span>
<a name="l00973"></a>00973 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00974"></a>00974 <span class="preprocessor"></span>
<a name="l00975"></a>00975 u_int16_t icmp_sum; <span class="comment">/* ICMP Checksum */</span>
<a name="l00976"></a>00976
<a name="l00977"></a>00977 <span class="keyword">union</span>
<a name="l00978"></a>00978 {
<a name="l00979"></a>00979 <span class="keyword">struct</span>
<a name="l00980"></a>00980 {
<a name="l00981"></a>00981 u_int16_t id; <span class="comment">/* ICMP id */</span>
<a name="l00982"></a>00982 u_int16_t seq;<span class="comment">/* ICMP sequence number */</span>
<a name="l00983"></a>00983 } echo;
<a name="l00984"></a>00984
<a name="l00985"></a>00985 <span class="preprocessor">#undef icmp_id</span>
<a name="l00986"></a>00986 <span class="preprocessor"></span><span class="preprocessor">#undef icmp_seq</span>
<a name="l00987"></a>00987 <span class="preprocessor"></span><span class="preprocessor">#define icmp_id hun.echo.id</span>
<a name="l00988"></a>00988 <span class="preprocessor"></span><span class="preprocessor">#define icmp_seq hun.echo.seq</span>
<a name="l00989"></a>00989 <span class="preprocessor"></span>
<a name="l00990"></a>00990 u_int32_t gateway; <span class="comment">/* gateway host */</span>
<a name="l00991"></a>00991 <span class="keyword">struct</span>
<a name="l00992"></a>00992 {
<a name="l00993"></a>00993 u_int16_t pad;<span class="comment">/* padding */</span>
<a name="l00994"></a>00994 u_int16_t mtu;<span class="comment">/* MTU size */</span>
<a name="l00995"></a>00995 } frag;
<a name="l00996"></a>00996 } hun;
<a name="l00997"></a>00997 <span class="keyword">union</span>
<a name="l00998"></a>00998 {
<a name="l00999"></a>00999 <span class="keyword">struct</span>
<a name="l01000"></a>01000 {
<a name="l01001"></a>01001 n_time its_otime;
<a name="l01002"></a>01002 n_time its_rtime;
<a name="l01003"></a>01003 n_time its_ttime;
<a name="l01004"></a>01004 } ts;
<a name="l01005"></a>01005 <span class="keyword">struct</span>
<a name="l01006"></a>01006 {
<a name="l01007"></a>01007 <span class="keyword">struct </span>libnet_ipv4_hdr idi_ip;
<a name="l01008"></a>01008 <span class="comment">/* options and then 64 bits of data */</span>
<a name="l01009"></a>01009 } ip;
<a name="l01010"></a>01010 u_int32_t mask;
<a name="l01011"></a>01011 int8_t data[1];
<a name="l01012"></a>01012
<a name="l01013"></a>01013 <span class="preprocessor">#undef icmp_mask</span>
<a name="l01014"></a>01014 <span class="preprocessor"></span><span class="preprocessor">#define icmp_mask dun.mask</span>
<a name="l01015"></a>01015 <span class="preprocessor"></span><span class="preprocessor">#undef icmp_data</span>
<a name="l01016"></a>01016 <span class="preprocessor"></span><span class="preprocessor">#define icmp_data dun.data</span>
<a name="l01017"></a>01017 <span class="preprocessor"></span>
<a name="l01018"></a>01018 <span class="preprocessor">#undef icmp_otime</span>
<a name="l01019"></a>01019 <span class="preprocessor"></span><span class="preprocessor">#define icmp_otime dun.ts.its_otime</span>
<a name="l01020"></a>01020 <span class="preprocessor"></span><span class="preprocessor">#undef icmp_rtime</span>
<a name="l01021"></a>01021 <span class="preprocessor"></span><span class="preprocessor">#define icmp_rtime dun.ts.its_rtime</span>
<a name="l01022"></a>01022 <span class="preprocessor"></span><span class="preprocessor">#undef icmp_ttime</span>
<a name="l01023"></a>01023 <span class="preprocessor"></span><span class="preprocessor">#define icmp_ttime dun.ts.its_ttime</span>
<a name="l01024"></a>01024 <span class="preprocessor"></span> }dun;
<a name="l01025"></a>01025 };
<a name="l01026"></a>01026
<a name="l01027"></a>01027
<a name="l01028"></a>01028 <span class="comment">/*</span>
<a name="l01029"></a>01029 <span class="comment"> * IGMP header</span>
<a name="l01030"></a>01030 <span class="comment"> * Internet Group Message Protocol</span>
<a name="l01031"></a>01031 <span class="comment"> * Static header size: 8 bytes</span>
<a name="l01032"></a>01032 <span class="comment"> */</span>
<a name="l01033"></a>01033 <span class="keyword">struct </span>libnet_igmp_hdr
<a name="l01034"></a>01034 {
<a name="l01035"></a>01035 u_int8_t igmp_type; <span class="comment">/* IGMP type */</span>
<a name="l01036"></a>01036 <span class="preprocessor">#ifndef IGMP_MEMBERSHIP_QUERY</span>
<a name="l01037"></a>01037 <span class="preprocessor"></span><span class="preprocessor">#define IGMP_MEMBERSHIP_QUERY 0x11 </span><span class="comment">/* membership query */</span>
<a name="l01038"></a>01038 <span class="preprocessor">#endif</span>
<a name="l01039"></a>01039 <span class="preprocessor"></span><span class="preprocessor">#ifndef IGMP_V1_MEMBERSHIP_REPORT</span>
<a name="l01040"></a>01040 <span class="preprocessor"></span><span class="preprocessor">#define IGMP_V1_MEMBERSHIP_REPORT 0x12 </span><span class="comment">/* Ver. 1 membership report */</span>
<a name="l01041"></a>01041 <span class="preprocessor">#endif</span>
<a name="l01042"></a>01042 <span class="preprocessor"></span><span class="preprocessor">#ifndef IGMP_V2_MEMBERSHIP_REPORT</span>
<a name="l01043"></a>01043 <span class="preprocessor"></span><span class="preprocessor">#define IGMP_V2_MEMBERSHIP_REPORT 0x16 </span><span class="comment">/* Ver. 2 membership report */</span>
<a name="l01044"></a>01044 <span class="preprocessor">#endif</span>
<a name="l01045"></a>01045 <span class="preprocessor"></span><span class="preprocessor">#ifndef IGMP_LEAVE_GROUP</span>
<a name="l01046"></a>01046 <span class="preprocessor"></span><span class="preprocessor">#define IGMP_LEAVE_GROUP 0x17 </span><span class="comment">/* Leave-group message */</span>
<a name="l01047"></a>01047 <span class="preprocessor">#endif</span>
<a name="l01048"></a>01048 <span class="preprocessor"></span> u_int8_t igmp_code; <span class="comment">/* IGMP code */</span>
<a name="l01049"></a>01049 u_int16_t igmp_sum; <span class="comment">/* IGMP checksum */</span>
<a name="l01050"></a>01050 <span class="keyword">struct </span>in_addr igmp_group;<span class="comment">/* IGMP host IP */</span>
<a name="l01051"></a>01051 };
<a name="l01052"></a>01052
<a name="l01053"></a>01053
<a name="l01054"></a>01054 <span class="comment">/*</span>
<a name="l01055"></a>01055 <span class="comment"> * IPSEC header</span>
<a name="l01056"></a>01056 <span class="comment"> * Internet Protocol Security Protocol</span>
<a name="l01057"></a>01057 <span class="comment"> * Encapsulating Security Payload Header Static header size: 12 bytes</span>
<a name="l01058"></a>01058 <span class="comment"> * Encapsulating Security Payload Footer Base header size: 2 bytes</span>
<a name="l01059"></a>01059 <span class="comment"> * Authentication Header Static Size: 16 bytes</span>
<a name="l01060"></a>01060 <span class="comment"> */</span>
<a name="l01061"></a>01061 <span class="preprocessor">#ifndef IPPROTO_ESP</span>
<a name="l01062"></a>01062 <span class="preprocessor"></span><span class="preprocessor">#define IPPROTO_ESP 50 </span><span class="comment">/* not everyone's got this */</span>
<a name="l01063"></a>01063 <span class="preprocessor">#endif</span>
<a name="l01064"></a>01064 <span class="preprocessor"></span><span class="keyword">struct </span>libnet_esp_hdr
<a name="l01065"></a>01065 {
<a name="l01066"></a>01066 u_int32_t esp_spi; <span class="comment">/* security parameter index */</span>
<a name="l01067"></a>01067 u_int32_t esp_seq; <span class="comment">/* ESP sequence number */</span>
<a name="l01068"></a>01068 u_int32_t esp_iv; <span class="comment">/* initialization vector */</span>
<a name="l01069"></a>01069 };
<a name="l01070"></a>01070
<a name="l01071"></a>01071 <span class="keyword">struct </span>libnet_esp_ftr
<a name="l01072"></a>01072 {
<a name="l01073"></a>01073 u_int8_t esp_pad_len; <span class="comment">/* padding length */</span>
<a name="l01074"></a>01074 u_int8_t esp_nh; <span class="comment">/* next header pointer */</span>
<a name="l01075"></a>01075 int8_t *esp_auth; <span class="comment">/* authentication data */</span>
<a name="l01076"></a>01076 };
<a name="l01077"></a>01077
<a name="l01078"></a>01078 <span class="preprocessor">#ifndef IPPROTO_AH</span>
<a name="l01079"></a>01079 <span class="preprocessor"></span><span class="preprocessor">#define IPPROTO_AH 51 </span><span class="comment">/* not everyone's got this */</span>
<a name="l01080"></a>01080 <span class="preprocessor">#endif</span>
<a name="l01081"></a>01081 <span class="preprocessor"></span><span class="keyword">struct </span>libnet_ah_hdr
<a name="l01082"></a>01082 {
<a name="l01083"></a>01083 u_int8_t ah_nh; <span class="comment">/* next header */</span>
<a name="l01084"></a>01084 u_int8_t ah_len; <span class="comment">/* payload length */</span>
<a name="l01085"></a>01085 u_int16_t ah_res; <span class="comment">/* reserved */</span>
<a name="l01086"></a>01086 u_int32_t ah_spi; <span class="comment">/* security parameter index */</span>
<a name="l01087"></a>01087 u_int32_t ah_seq; <span class="comment">/* AH sequence number */</span>
<a name="l01088"></a>01088 u_int32_t ah_auth; <span class="comment">/* authentication data */</span>
<a name="l01089"></a>01089 };
<a name="l01090"></a>01090
<a name="l01091"></a>01091
<a name="l01092"></a>01092 <span class="comment">/*</span>
<a name="l01093"></a>01093 <span class="comment"> * For checksum stuff -- IANA says 135-254 is "unassigned" as of 12.2001.</span>
<a name="l01094"></a>01094 <span class="comment"> * Let's hope this one stays that way for a while!</span>
<a name="l01095"></a>01095 <span class="comment"> */</span>
<a name="l01096"></a>01096 <span class="preprocessor">#define LIBNET_PROTO_ISL 201</span>
<a name="l01097"></a>01097 <span class="preprocessor"></span><span class="comment">/*</span>
<a name="l01098"></a>01098 <span class="comment"> * ISL header</span>
<a name="l01099"></a>01099 <span class="comment"> * Cisco Inter-Switch Link</span>
<a name="l01100"></a>01100 <span class="comment"> * Static header size: 26 bytes</span>
<a name="l01101"></a>01101 <span class="comment"> */</span>
<a name="l01102"></a>01102 <span class="keyword">struct </span>libnet_isl_hdr
<a name="l01103"></a>01103 {
<a name="l01104"></a>01104 u_int8_t isl_dhost[5]; <span class="comment">/* destination address "01:00:0c:00:00" */</span>
<a name="l01105"></a>01105 <span class="preprocessor">#if (LIBNET_LIL_ENDIAN)</span>
<a name="l01106"></a>01106 <span class="preprocessor"></span> u_int8_t isl_type:4, <span class="comment">/* type of frame */</span>
<a name="l01107"></a>01107 isl_user:4; <span class="comment">/* user defined bits */</span>
<a name="l01108"></a>01108 <span class="preprocessor">#endif</span>
<a name="l01109"></a>01109 <span class="preprocessor"></span><span class="preprocessor">#if (LIBNET_BIG_ENDIAN)</span>
<a name="l01110"></a>01110 <span class="preprocessor"></span> u_int8_t isl_user:4, <span class="comment">/* user defined bits */</span>
<a name="l01111"></a>01111 isl_type:4; <span class="comment">/* type of frame */</span>
<a name="l01112"></a>01112 <span class="preprocessor">#endif</span>
<a name="l01113"></a>01113 <span class="preprocessor"></span> u_int8_t isl_shost[6]; <span class="comment">/* source address */</span>
<a name="l01114"></a>01114 u_int16_t isl_len; <span class="comment">/* total length of packet - 18 bytes */</span>
<a name="l01115"></a>01115 u_int8_t isl_snap[6]; <span class="comment">/* 0xaaaa03 + vendor code */</span>
<a name="l01116"></a>01116 u_int16_t isl_vid; <span class="comment">/* 15 bit VLAN ID, 1 bit BPDU / CDP indicator */</span>
<a name="l01117"></a>01117 u_int16_t isl_index; <span class="comment">/* port index */</span>
<a name="l01118"></a>01118 u_int16_t isl_reserved; <span class="comment">/* used for FDDI and token ring */</span>
<a name="l01119"></a>01119 <span class="comment">/* ethernet frame and 4 byte isl crc */</span>
<a name="l01120"></a>01120 };
<a name="l01121"></a>01121
<a name="l01122"></a>01122 <span class="preprocessor">#ifndef IPPROTO_OSPF</span>
<a name="l01123"></a>01123 <span class="preprocessor"></span><span class="preprocessor">#define IPPROTO_OSPF 89 </span><span class="comment">/* not everyone's got this */</span>
<a name="l01124"></a>01124 <span class="preprocessor">#endif</span>
<a name="l01125"></a>01125 <span class="preprocessor"></span><span class="preprocessor">#define IPPROTO_OSPF_LSA 890 </span><span class="comment">/* made this up. Hope it's unused */</span>
<a name="l01126"></a>01126 <span class="preprocessor">#define LIBNET_MODX 4102 </span><span class="comment">/* used in LSA checksum */</span>
<a name="l01127"></a>01127
<a name="l01128"></a>01128 <span class="comment">/*</span>
<a name="l01129"></a>01129 <span class="comment"> * Options used in multiple OSPF packets</span>
<a name="l01130"></a>01130 <span class="comment"> * More info can be found in section A.2 of RFC 2328.</span>
<a name="l01131"></a>01131 <span class="comment"> */</span>
<a name="l01132"></a>01132 <span class="preprocessor">#define LIBNET_OPT_EBIT 0x02 </span><span class="comment">/* describes the way AS-external-LSAs are flooded */</span>
<a name="l01133"></a>01133 <span class="preprocessor">#define LIBNET_OPT_MCBIT 0x04 </span><span class="comment">/* whether or not IP multicast dgrams are fwdd */</span>
<a name="l01134"></a>01134 <span class="preprocessor">#define LIBNET_OPT_NPBIT 0x08 </span><span class="comment">/* describes handling of type-7 LSAs */</span>
<a name="l01135"></a>01135 <span class="preprocessor">#define LIBNET_OPT_EABIT 0x10 </span><span class="comment">/* rtr's willingness to send/recv EA-LSAs */</span>
<a name="l01136"></a>01136 <span class="preprocessor">#define LIBNET_OPT_DCBIT 0x20 </span><span class="comment">/* describes handling of demand circuits */</span>
<a name="l01137"></a>01137
<a name="l01138"></a>01138
<a name="l01139"></a>01139 <span class="comment">/*</span>
<a name="l01140"></a>01140 <span class="comment"> * MPLS header</span>
<a name="l01141"></a>01141 <span class="comment"> * Multi-Protocol Label Switching</span>
<a name="l01142"></a>01142 <span class="comment"> * Static header size: 4 bytes</span>
<a name="l01143"></a>01143 <span class="comment"> */</span>
<a name="l01144"></a>01144 <span class="keyword">struct </span>libnet_mpls_hdr
<a name="l01145"></a>01145 {
<a name="l01146"></a>01146 u_int32_t mpls_les; <span class="comment">/* 20 bits label, 3 bits exp, 1 bit bos, ttl */</span>
<a name="l01147"></a>01147 <span class="preprocessor">#define LIBNET_MPLS_BOS_ON 1</span>
<a name="l01148"></a>01148 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_MPLS_BOS_OFF 0</span>
<a name="l01149"></a>01149 <span class="preprocessor"></span>};
<a name="l01150"></a>01150
<a name="l01151"></a>01151 <span class="comment">/*</span>
<a name="l01152"></a>01152 <span class="comment"> * NTP header</span>
<a name="l01153"></a>01153 <span class="comment"> * Network Time Protocol</span>
<a name="l01154"></a>01154 <span class="comment"> * Static header size: 48 bytes</span>
<a name="l01155"></a>01155 <span class="comment"> */</span>
<a name="l01156"></a>01156 <span class="keyword">struct </span>libnet_ntp_hdr_l_fp <span class="comment">/* int32_t floating point (64-bit) */</span>
<a name="l01157"></a>01157 {
<a name="l01158"></a>01158 u_int32_t integer; <span class="comment">/* integer */</span>
<a name="l01159"></a>01159 u_int32_t fraction; <span class="comment">/* fraction */</span>
<a name="l01160"></a>01160 };
<a name="l01161"></a>01161
<a name="l01162"></a>01162 <span class="keyword">struct </span>libnet_ntp_hdr_s_fp <span class="comment">/* int16_t floating point (32-bit) */</span>
<a name="l01163"></a>01163 {
<a name="l01164"></a>01164 u_int16_t integer; <span class="comment">/* integer */</span>
<a name="l01165"></a>01165 u_int16_t fraction; <span class="comment">/* fraction */</span>
<a name="l01166"></a>01166 };
<a name="l01167"></a>01167
<a name="l01168"></a>01168
<a name="l01169"></a>01169 <span class="keyword">struct </span>libnet_ntp_hdr
<a name="l01170"></a>01170 {
<a name="l01171"></a>01171 u_int8_t ntp_li_vn_mode; <span class="comment">/* leap indicator, version, mode */</span>
<a name="l01172"></a>01172 <span class="preprocessor">#define LIBNET_NTP_LI_NW 0x0 </span><span class="comment">/* no warning */</span>
<a name="l01173"></a>01173 <span class="preprocessor">#define LIBNET_NTP_LI_AS 0x1 </span><span class="comment">/* last minute has 61 seconds */</span>
<a name="l01174"></a>01174 <span class="preprocessor">#define LIBNET_NTP_LI_DS 0x2 </span><span class="comment">/* last minute has 59 seconds */</span>
<a name="l01175"></a>01175 <span class="preprocessor">#define LIBNET_NTP_LI_AC 0x3 </span><span class="comment">/* alarm condition */</span>
<a name="l01176"></a>01176
<a name="l01177"></a>01177 <span class="preprocessor">#define LIBNET_NTP_VN_2 0x2 </span><span class="comment">/* version 2 */</span>
<a name="l01178"></a>01178 <span class="preprocessor">#define LIBNET_NTP_VN_3 0x3 </span><span class="comment">/* version 3 */</span>
<a name="l01179"></a>01179 <span class="preprocessor">#define LIBNET_NTP_VN_4 0x4 </span><span class="comment">/* version 4 */</span>
<a name="l01180"></a>01180
<a name="l01181"></a>01181 <span class="preprocessor">#define LIBNET_NTP_MODE_R 0x0 </span><span class="comment">/* reserved */</span>
<a name="l01182"></a>01182 <span class="preprocessor">#define LIBNET_NTP_MODE_A 0x1 </span><span class="comment">/* symmetric active */</span>
<a name="l01183"></a>01183 <span class="preprocessor">#define LIBNET_NTP_MODE_P 0x2 </span><span class="comment">/* symmetric passive */</span>
<a name="l01184"></a>01184 <span class="preprocessor">#define LIBNET_NTP_MODE_C 0x3 </span><span class="comment">/* client */</span>
<a name="l01185"></a>01185 <span class="preprocessor">#define LIBNET_NTP_MODE_S 0x4 </span><span class="comment">/* server */</span>
<a name="l01186"></a>01186 <span class="preprocessor">#define LIBNET_NTP_MODE_B 0x5 </span><span class="comment">/* broadcast */</span>
<a name="l01187"></a>01187 <span class="preprocessor">#define LIBNET_NTP_MODE_RC 0x6 </span><span class="comment">/* reserved for NTP control message */</span>
<a name="l01188"></a>01188 <span class="preprocessor">#define LIBNET_NTP_MODE_RP 0x7 </span><span class="comment">/* reserved for private use */</span>
<a name="l01189"></a>01189 u_int8_t ntp_stratum; <span class="comment">/* stratum */</span>
<a name="l01190"></a>01190 <span class="preprocessor">#define LIBNET_NTP_STRATUM_UNAVAIL 0x0 </span><span class="comment">/* unspecified or unavailable */</span>
<a name="l01191"></a>01191 <span class="preprocessor">#define LIBNET_NTP_STRATUM_PRIMARY 0x1 </span><span class="comment">/* primary reference (radio clock) */</span>
<a name="l01192"></a>01192 <span class="comment">/* 2 - 15 is secondary */</span>
<a name="l01193"></a>01193 <span class="comment">/* 16 - 255 is reserved */</span>
<a name="l01194"></a>01194 u_int8_t ntp_poll; <span class="comment">/* poll interval (should be 4 - 12) */</span>
<a name="l01195"></a>01195 u_int8_t ntp_precision; <span class="comment">/* local clock precision */</span>
<a name="l01196"></a>01196 <span class="keyword">struct </span>libnet_ntp_hdr_s_fp ntp_delay; <span class="comment">/* roundtrip delay */</span>
<a name="l01197"></a>01197 <span class="keyword">struct </span>libnet_ntp_hdr_s_fp ntp_dispersion; <span class="comment">/* nominal error */</span>
<a name="l01198"></a>01198 u_int32_t ntp_reference_id; <span class="comment">/* reference source id */</span>
<a name="l01199"></a>01199 <span class="preprocessor">#define LIBNET_NTP_REF_LOCAL 0x4c4f434c </span><span class="comment">/* uncalibrated local clock */</span>
<a name="l01200"></a>01200 <span class="preprocessor">#define LIBNET_NTP_REF_PPS 0x50505300 </span><span class="comment">/* atomic / pulse-per-second clock */</span>
<a name="l01201"></a>01201 <span class="preprocessor">#define LIBNET_NTP_REF_ACTS 0x41435453 </span><span class="comment">/* NIST dialup modem */</span>
<a name="l01202"></a>01202 <span class="preprocessor">#define LIBNET_NTP_REF_USNO 0x55534e4f </span><span class="comment">/* USNO modem service */</span>
<a name="l01203"></a>01203 <span class="preprocessor">#define LIBNET_NTP_REF_PTB 0x50544200 </span><span class="comment">/* PTB (German) modem service */</span>
<a name="l01204"></a>01204 <span class="preprocessor">#define LIBNET_NTP_REF_TDF 0x54444600 </span><span class="comment">/* Allouis (French) radio */</span>
<a name="l01205"></a>01205 <span class="preprocessor">#define LIBNET_NTP_REF_DCF 0x44434600 </span><span class="comment">/* Mainflingen (German) radio */</span>
<a name="l01206"></a>01206 <span class="preprocessor">#define LIBNET_NTP_REF_MSF 0x4d534600 </span><span class="comment">/* Rugby (UK) radio */</span>
<a name="l01207"></a>01207 <span class="preprocessor">#define LIBNET_NTP_REF_WWV 0x57575600 </span><span class="comment">/* Ft Collins (US) radio */</span>
<a name="l01208"></a>01208 <span class="preprocessor">#define LIBNET_NTP_REF_WWVB 0x57575642 </span><span class="comment">/* Boulder (US) radio */</span>
<a name="l01209"></a>01209 <span class="preprocessor">#define LIBNET_NTP_REF_WWVH 0x57575648 </span><span class="comment">/* Kaui Hawaii (US) radio */</span>
<a name="l01210"></a>01210 <span class="preprocessor">#define LIBNET_NTP_REF_CHU 0x43485500 </span><span class="comment">/* Ottaha (Canada) radio */</span>
<a name="l01211"></a>01211 <span class="preprocessor">#define LIBNET_NTP_REF_LORC 0x4c4f5243 </span><span class="comment">/* LORAN-C radionavigation */</span>
<a name="l01212"></a>01212 <span class="preprocessor">#define LIBNET_NTP_REF_OMEG 0x4f4d4547 </span><span class="comment">/* OMEGA radionavigation */</span>
<a name="l01213"></a>01213 <span class="preprocessor">#define LIBNET_NTP_REF_GPS 0x47505300 </span><span class="comment">/* global positioning system */</span>
<a name="l01214"></a>01214 <span class="preprocessor">#define LIBNET_NTP_REF_GOES 0x474f4553 </span><span class="comment">/* geostationary orbit env satellite */</span>
<a name="l01215"></a>01215 <span class="keyword">struct </span>libnet_ntp_hdr_l_fp ntp_ref_ts; <span class="comment">/* reference timestamp */</span>
<a name="l01216"></a>01216 <span class="keyword">struct </span>libnet_ntp_hdr_l_fp ntp_orig_ts; <span class="comment">/* originate timestamp */</span>
<a name="l01217"></a>01217 <span class="keyword">struct </span>libnet_ntp_hdr_l_fp ntp_rec_ts; <span class="comment">/* receive timestamp */</span>
<a name="l01218"></a>01218 <span class="keyword">struct </span>libnet_ntp_hdr_l_fp ntp_xmt_ts; <span class="comment">/* transmit timestamp */</span>
<a name="l01219"></a>01219 };
<a name="l01220"></a>01220
<a name="l01221"></a>01221
<a name="l01222"></a>01222 <span class="comment">/*</span>
<a name="l01223"></a>01223 <span class="comment"> * OSPFv2 header</span>
<a name="l01224"></a>01224 <span class="comment"> * Open Shortest Path First</span>
<a name="l01225"></a>01225 <span class="comment"> * Static header size: 16 bytes</span>
<a name="l01226"></a>01226 <span class="comment"> */</span>
<a name="l01227"></a>01227 <span class="keyword">struct </span>libnet_ospf_hdr
<a name="l01228"></a>01228 {
<a name="l01229"></a>01229 u_int8_t ospf_v; <span class="comment">/* version */</span>
<a name="l01230"></a>01230 <span class="preprocessor">#define OSPFVERSION 2</span>
<a name="l01231"></a>01231 <span class="preprocessor"></span> u_int8_t ospf_type; <span class="comment">/* type */</span>
<a name="l01232"></a>01232 <span class="preprocessor">#define LIBNET_OSPF_UMD 0 </span><span class="comment">/* UMd monitoring packet */</span>
<a name="l01233"></a>01233 <span class="preprocessor">#define LIBNET_OSPF_HELLO 1 </span><span class="comment">/* HELLO packet */</span>
<a name="l01234"></a>01234 <span class="preprocessor">#define LIBNET_OSPF_DBD 2 </span><span class="comment">/* dataBase description packet */</span>
<a name="l01235"></a>01235 <span class="preprocessor">#define LIBNET_OSPF_LSR 3 </span><span class="comment">/* link state request packet */</span>
<a name="l01236"></a>01236 <span class="preprocessor">#define LIBNET_OSPF_LSU 4 </span><span class="comment">/* link state Update Packet */</span>
<a name="l01237"></a>01237 <span class="preprocessor">#define LIBNET_OSPF_LSA 5 </span><span class="comment">/* link state acknowledgement packet */</span>
<a name="l01238"></a>01238 u_int16_t ospf_len; <span class="comment">/* length */</span>
<a name="l01239"></a>01239 <span class="keyword">struct </span>in_addr ospf_rtr_id; <span class="comment">/* source router ID */</span>
<a name="l01240"></a>01240 <span class="keyword">struct </span>in_addr ospf_area_id;<span class="comment">/* roam ID */</span>
<a name="l01241"></a>01241 u_int16_t ospf_sum; <span class="comment">/* checksum */</span>
<a name="l01242"></a>01242 u_int16_t ospf_auth_type; <span class="comment">/* authentication type */</span>
<a name="l01243"></a>01243 <span class="preprocessor">#define LIBNET_OSPF_AUTH_NULL 0 </span><span class="comment">/* null password */</span>
<a name="l01244"></a>01244 <span class="preprocessor">#define LIBNET_OSPF_AUTH_SIMPLE 1 </span><span class="comment">/* simple, plaintext, 8 int8_t password */</span>
<a name="l01245"></a>01245 <span class="preprocessor">#define LIBNET_OSPF_AUTH_MD5 2 </span><span class="comment">/* MD5 */</span>
<a name="l01246"></a>01246 };
<a name="l01247"></a>01247
<a name="l01248"></a>01248
<a name="l01249"></a>01249 <span class="comment">/*</span>
<a name="l01250"></a>01250 <span class="comment"> * OSPF authentication header</span>
<a name="l01251"></a>01251 <span class="comment"> * Open Shortest Path First</span>
<a name="l01252"></a>01252 <span class="comment"> * Static header size: 8 bytes</span>
<a name="l01253"></a>01253 <span class="comment"> */</span>
<a name="l01254"></a>01254 <span class="keyword">struct </span>libnet_auth_hdr
<a name="l01255"></a>01255 {
<a name="l01256"></a>01256 u_int16_t ospf_auth_null; <span class="comment">/* NULL */</span>
<a name="l01257"></a>01257 u_int8_t ospf_auth_keyid; <span class="comment">/* authentication key ID */</span>
<a name="l01258"></a>01258 u_int8_t ospf_auth_len; <span class="comment">/* auth data length */</span>
<a name="l01259"></a>01259 u_int ospf_auth_seq; <span class="comment">/* cryptographic sequence number */</span>
<a name="l01260"></a>01260 };
<a name="l01261"></a>01261
<a name="l01262"></a>01262
<a name="l01263"></a>01263 <span class="comment">/*</span>
<a name="l01264"></a>01264 <span class="comment"> * OSPF hello header</span>
<a name="l01265"></a>01265 <span class="comment"> * Open Shortest Path First</span>
<a name="l01266"></a>01266 <span class="comment"> * Static header size: 28 bytes</span>
<a name="l01267"></a>01267 <span class="comment"> */</span>
<a name="l01268"></a>01268 <span class="keyword">struct </span>libnet_ospf_hello_hdr
<a name="l01269"></a>01269 {
<a name="l01270"></a>01270 <span class="keyword">struct </span>in_addr hello_nmask; <span class="comment">/* netmask associated with the interface */</span>
<a name="l01271"></a>01271 u_int16_t hello_intrvl; <span class="comment">/* num of seconds between routers last packet */</span>
<a name="l01272"></a>01272 u_int8_t hello_opts; <span class="comment">/* Options for HELLO packets (look above) */</span>
<a name="l01273"></a>01273 u_int8_t hello_rtr_pri; <span class="comment">/* router's priority (if 0, can't be backup) */</span>
<a name="l01274"></a>01274 u_int hello_dead_intvl; <span class="comment">/* # of secs a router is silent till deemed down */</span>
<a name="l01275"></a>01275 <span class="keyword">struct </span>in_addr hello_des_rtr; <span class="comment">/* Designated router on the network */</span>
<a name="l01276"></a>01276 <span class="keyword">struct </span>in_addr hello_bkup_rtr; <span class="comment">/* Backup router */</span>
<a name="l01277"></a>01277 <span class="keyword">struct </span>in_addr hello_nbr; <span class="comment">/* neighbor router, memcpy more as needed */</span>
<a name="l01278"></a>01278 };
<a name="l01279"></a>01279
<a name="l01280"></a>01280
<a name="l01281"></a>01281 <span class="comment">/*</span>
<a name="l01282"></a>01282 <span class="comment"> * Database Description header.</span>
<a name="l01283"></a>01283 <span class="comment"> */</span>
<a name="l01284"></a>01284 <span class="keyword">struct </span>libnet_dbd_hdr
<a name="l01285"></a>01285 {
<a name="l01286"></a>01286 u_int16_t dbd_mtu_len; <span class="comment">/* max length of IP dgram that this 'if' can use */</span>
<a name="l01287"></a>01287 u_int8_t dbd_opts; <span class="comment">/* DBD packet options (from above) */</span>
<a name="l01288"></a>01288 u_int8_t dbd_type; <span class="comment">/* type of exchange occurring */</span>
<a name="l01289"></a>01289 <span class="preprocessor">#define LIBNET_DBD_IBI 0x01 </span><span class="comment">/* init */</span>
<a name="l01290"></a>01290 <span class="preprocessor">#define LIBNET_DBD_MBIT 0x02 </span><span class="comment">/* more DBD packets are to come */</span>
<a name="l01291"></a>01291 <span class="preprocessor">#define LIBNET_DBD_MSBIT 0x04 </span><span class="comment">/* If 1, sender is the master in the exchange */</span>
<a name="l01292"></a>01292 u_int dbd_seq; <span class="comment">/* DBD sequence number */</span>
<a name="l01293"></a>01293 };
<a name="l01294"></a>01294
<a name="l01295"></a>01295
<a name="l01296"></a>01296 <span class="comment">/*</span>
<a name="l01297"></a>01297 <span class="comment"> * used for the LS type field in all LS* headers</span>
<a name="l01298"></a>01298 <span class="comment"> */</span>
<a name="l01299"></a>01299 <span class="preprocessor">#define LIBNET_LS_TYPE_RTR 1 </span><span class="comment">/* router-LSA */</span>
<a name="l01300"></a>01300 <span class="preprocessor">#define LIBNET_LS_TYPE_NET 2 </span><span class="comment">/* network-LSA */</span>
<a name="l01301"></a>01301 <span class="preprocessor">#define LIBNET_LS_TYPE_IP 3 </span><span class="comment">/* summary-LSA (IP Network) */</span>
<a name="l01302"></a>01302 <span class="preprocessor">#define LIBNET_LS_TYPE_ASBR 4 </span><span class="comment">/* summary-LSA (ASBR) */</span>
<a name="l01303"></a>01303 <span class="preprocessor">#define LIBNET_LS_TYPE_ASEXT 5 </span><span class="comment">/* AS-external-LSA */</span>
<a name="l01304"></a>01304
<a name="l01305"></a>01305
<a name="l01306"></a>01306 <span class="comment">/*</span>
<a name="l01307"></a>01307 <span class="comment"> * Link State Request header</span>
<a name="l01308"></a>01308 <span class="comment"> */</span>
<a name="l01309"></a>01309 <span class="keyword">struct </span>libnet_lsr_hdr
<a name="l01310"></a>01310 {
<a name="l01311"></a>01311 u_int lsr_type; <span class="comment">/* type of LS being requested */</span>
<a name="l01312"></a>01312 u_int lsr_lsid; <span class="comment">/* link state ID */</span>
<a name="l01313"></a>01313 <span class="keyword">struct </span>in_addr lsr_adrtr; <span class="comment">/* advertising router (memcpy more as needed) */</span>
<a name="l01314"></a>01314 };
<a name="l01315"></a>01315
<a name="l01316"></a>01316
<a name="l01317"></a>01317 <span class="comment">/*</span>
<a name="l01318"></a>01318 <span class="comment"> * Link State Update header</span>
<a name="l01319"></a>01319 <span class="comment"> */</span>
<a name="l01320"></a>01320 <span class="keyword">struct </span>libnet_lsu_hdr
<a name="l01321"></a>01321 {
<a name="l01322"></a>01322 u_int lsu_num; <span class="comment">/* number of LSAs that will be broadcasted */</span>
<a name="l01323"></a>01323 };
<a name="l01324"></a>01324
<a name="l01325"></a>01325
<a name="l01326"></a>01326 <span class="comment">/*</span>
<a name="l01327"></a>01327 <span class="comment"> * Link State Acknowledgement header.</span>
<a name="l01328"></a>01328 <span class="comment"> */</span>
<a name="l01329"></a>01329 <span class="keyword">struct </span>libnet_lsa_hdr
<a name="l01330"></a>01330 {
<a name="l01331"></a>01331 u_int16_t lsa_age; <span class="comment">/* time in seconds since the LSA was originated */</span>
<a name="l01332"></a>01332 u_int8_t lsa_opts; <span class="comment">/* look above for OPTS_* */</span>
<a name="l01333"></a>01333 u_int8_t lsa_type; <span class="comment">/* look below for LS_TYPE_* */</span>
<a name="l01334"></a>01334 u_int lsa_id; <span class="comment">/* link State ID */</span>
<a name="l01335"></a>01335 <span class="keyword">struct </span>in_addr lsa_adv; <span class="comment">/* router ID of Advertising router */</span>
<a name="l01336"></a>01336 u_int lsa_seq; <span class="comment">/* LSA sequence number to detect old/bad ones */</span>
<a name="l01337"></a>01337 u_int16_t lsa_sum; <span class="comment">/* "Fletcher Checksum" of all fields minus age */</span>
<a name="l01338"></a>01338 u_int16_t lsa_len; <span class="comment">/* length in bytes including the 20 byte header */</span>
<a name="l01339"></a>01339 };
<a name="l01340"></a>01340
<a name="l01341"></a>01341
<a name="l01342"></a>01342 <span class="comment">/*</span>
<a name="l01343"></a>01343 <span class="comment"> * Router LSA data format</span>
<a name="l01344"></a>01344 <span class="comment"> *</span>
<a name="l01345"></a>01345 <span class="comment"> * Other stuff for TOS can be added for backward compatability, for this</span>
<a name="l01346"></a>01346 <span class="comment"> * version, only OSPFv2 is being FULLY supported.</span>
<a name="l01347"></a>01347 <span class="comment"> */</span>
<a name="l01348"></a>01348 <span class="keyword">struct </span>libnet_rtr_lsa_hdr
<a name="l01349"></a>01349 {
<a name="l01350"></a>01350 u_int16_t rtr_flags; <span class="comment">/* set to help describe packet */</span>
<a name="l01351"></a>01351 <span class="preprocessor">#define LIBNET_RTR_FLAGS_W 0x0100 </span><span class="comment">/* W bit */</span>
<a name="l01352"></a>01352 <span class="preprocessor">#define LIBNET_RTR_FLAGS_E 0x0200 </span><span class="comment">/* E bit */</span>
<a name="l01353"></a>01353 <span class="preprocessor">#define LIBNET_RTR_FLAGS_B 0x0400 </span><span class="comment">/* B bit */</span>
<a name="l01354"></a>01354 u_int16_t rtr_num; <span class="comment">/* number of links within that packet */</span>
<a name="l01355"></a>01355 u_int rtr_link_id; <span class="comment">/* describes link_data (look below) */</span>
<a name="l01356"></a>01356 <span class="preprocessor">#define LIBNET_LINK_ID_NBR_ID 1 </span><span class="comment">/* Neighbors router ID, also can be 4 */</span>
<a name="l01357"></a>01357 <span class="preprocessor">#define LIBNET_LINK_ID_IP_DES 2 </span><span class="comment">/* IP address of designated router */</span>
<a name="l01358"></a>01358 <span class="preprocessor">#define LIBNET_LINK_ID_SUB 3 </span><span class="comment">/* IP subnet number */</span>
<a name="l01359"></a>01359 u_int rtr_link_data; <span class="comment">/* Depending on link_id, info is here */</span>
<a name="l01360"></a>01360 u_int8_t rtr_type; <span class="comment">/* Description of router link */</span>
<a name="l01361"></a>01361 <span class="preprocessor">#define LIBNET_RTR_TYPE_PTP 1 </span><span class="comment">/* Point-To-Point */</span>
<a name="l01362"></a>01362 <span class="preprocessor">#define LIBNET_RTR_TYPE_TRANS 2 </span><span class="comment">/* Connection to a "transit network" */</span>
<a name="l01363"></a>01363 <span class="preprocessor">#define LIBNET_RTR_TYPE_STUB 3 </span><span class="comment">/* Connectin to a "stub network" */</span>
<a name="l01364"></a>01364 <span class="preprocessor">#define RTR_TYPE_VRTL 4 </span><span class="comment">/* connects to a "virtual link" */</span>
<a name="l01365"></a>01365 u_int8_t rtr_tos_num; <span class="comment">/* number of different TOS metrics for this link */</span>
<a name="l01366"></a>01366 u_int16_t rtr_metric; <span class="comment">/* the "cost" of using this link */</span>
<a name="l01367"></a>01367 };
<a name="l01368"></a>01368
<a name="l01369"></a>01369
<a name="l01370"></a>01370 <span class="comment">/*</span>
<a name="l01371"></a>01371 <span class="comment"> * Network LSA data format.</span>
<a name="l01372"></a>01372 <span class="comment"> */</span>
<a name="l01373"></a>01373 <span class="keyword">struct </span>libnet_net_lsa_hdr
<a name="l01374"></a>01374 {
<a name="l01375"></a>01375 <span class="keyword">struct </span>in_addr net_nmask; <span class="comment">/* Netmask for that network */</span>
<a name="l01376"></a>01376 u_int net_rtr_id; <span class="comment">/* ID of router attached to that network */</span>
<a name="l01377"></a>01377 };
<a name="l01378"></a>01378
<a name="l01379"></a>01379
<a name="l01380"></a>01380 <span class="comment">/*</span>
<a name="l01381"></a>01381 <span class="comment"> * Summary LSA data format.</span>
<a name="l01382"></a>01382 <span class="comment"> */</span>
<a name="l01383"></a>01383 <span class="keyword">struct </span>libnet_sum_lsa_hdr
<a name="l01384"></a>01384 {
<a name="l01385"></a>01385 <span class="keyword">struct </span>in_addr sum_nmask; <span class="comment">/* Netmask of destination IP address */</span>
<a name="l01386"></a>01386 u_int sum_metric; <span class="comment">/* Same as in rtr_lsa (&0xfff to use last 24bit */</span>
<a name="l01387"></a>01387 u_int sum_tos_metric; <span class="comment">/* first 8bits are TOS, 24bits are TOS Metric */</span>
<a name="l01388"></a>01388 };
<a name="l01389"></a>01389
<a name="l01390"></a>01390
<a name="l01391"></a>01391 <span class="comment">/*</span>
<a name="l01392"></a>01392 <span class="comment"> * AS External LSA data format.</span>
<a name="l01393"></a>01393 <span class="comment"> * & 0xfff logic operator for as_metric to get last 24bits.</span>
<a name="l01394"></a>01394 <span class="comment"> */</span>
<a name="l01395"></a>01395 <span class="keyword">struct </span>libnet_as_lsa_hdr
<a name="l01396"></a>01396 {
<a name="l01397"></a>01397 <span class="keyword">struct </span>in_addr as_nmask; <span class="comment">/* Netmask for advertised destination */</span>
<a name="l01398"></a>01398 u_int as_metric; <span class="comment">/* May have to set E bit in first 8bits */</span>
<a name="l01399"></a>01399 <span class="preprocessor">#define LIBNET_AS_E_BIT_ON 0x80000000 </span><span class="comment">/* as_metric */</span>
<a name="l01400"></a>01400 <span class="keyword">struct </span>in_addr as_fwd_addr; <span class="comment">/* Forwarding address */</span>
<a name="l01401"></a>01401 u_int as_rte_tag; <span class="comment">/* External route tag */</span>
<a name="l01402"></a>01402 };
<a name="l01403"></a>01403
<a name="l01404"></a>01404
<a name="l01405"></a>01405 <span class="comment">/*</span>
<a name="l01406"></a>01406 <span class="comment"> * Base RIP header</span>
<a name="l01407"></a>01407 <span class="comment"> * Routing Information Protocol</span>
<a name="l01408"></a>01408 <span class="comment"> * Base header size: 24 bytes</span>
<a name="l01409"></a>01409 <span class="comment"> */</span>
<a name="l01410"></a>01410 <span class="keyword">struct </span>libnet_rip_hdr
<a name="l01411"></a>01411 {
<a name="l01412"></a>01412 u_int8_t rip_cmd; <span class="comment">/* RIP command */</span>
<a name="l01413"></a>01413 <span class="preprocessor">#define RIPCMD_REQUEST 1 </span><span class="comment">/* want info */</span>
<a name="l01414"></a>01414 <span class="preprocessor">#define RIPCMD_RESPONSE 2 </span><span class="comment">/* responding to request */</span>
<a name="l01415"></a>01415 <span class="preprocessor">#define RIPCMD_TRACEON 3 </span><span class="comment">/* turn tracing on */</span>
<a name="l01416"></a>01416 <span class="preprocessor">#define RIPCMD_TRACEOFF 4 </span><span class="comment">/* turn it off */</span>
<a name="l01417"></a>01417 <span class="preprocessor">#define RIPCMD_POLL 5 </span><span class="comment">/* like request, but anyone answers */</span>
<a name="l01418"></a>01418 <span class="preprocessor">#define RIPCMD_POLLENTRY 6 </span><span class="comment">/* like poll, but for entire entry */</span>
<a name="l01419"></a>01419 <span class="preprocessor">#define RIPCMD_MAX 7 </span><span class="comment">/* ? command */</span>
<a name="l01420"></a>01420 u_int8_t rip_ver; <span class="comment">/* RIP version */</span>
<a name="l01421"></a>01421 <span class="preprocessor">#define RIPVER_0 0</span>
<a name="l01422"></a>01422 <span class="preprocessor"></span><span class="preprocessor">#define RIPVER_1 1</span>
<a name="l01423"></a>01423 <span class="preprocessor"></span><span class="preprocessor">#define RIPVER_2 2</span>
<a name="l01424"></a>01424 <span class="preprocessor"></span> u_int16_t rip_rd; <span class="comment">/* Zero (v1) or Routing Domain (v2) */</span>
<a name="l01425"></a>01425 u_int16_t rip_af; <span class="comment">/* Address family */</span>
<a name="l01426"></a>01426 u_int16_t rip_rt; <span class="comment">/* Zero (v1) or Route Tag (v2) */</span>
<a name="l01427"></a>01427 u_int32_t rip_addr; <span class="comment">/* IP address */</span>
<a name="l01428"></a>01428 u_int32_t rip_mask; <span class="comment">/* Zero (v1) or Subnet Mask (v2) */</span>
<a name="l01429"></a>01429 u_int32_t rip_next_hop; <span class="comment">/* Zero (v1) or Next hop IP address (v2) */</span>
<a name="l01430"></a>01430 u_int32_t rip_metric; <span class="comment">/* Metric */</span>
<a name="l01431"></a>01431 };
<a name="l01432"></a>01432
<a name="l01433"></a>01433 <span class="comment">/*</span>
<a name="l01434"></a>01434 <span class="comment"> * RPC headers</span>
<a name="l01435"></a>01435 <span class="comment"> * Remote Procedure Call</span>
<a name="l01436"></a>01436 <span class="comment"> */</span>
<a name="l01437"></a>01437 <span class="preprocessor">#define LIBNET_RPC_CALL 0</span>
<a name="l01438"></a>01438 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_RPC_REPLY 1</span>
<a name="l01439"></a>01439 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_RPC_VERS 2</span>
<a name="l01440"></a>01440 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_RPC_LAST_FRAG 0x80000000</span>
<a name="l01441"></a>01441 <span class="preprocessor"></span>
<a name="l01442"></a>01442 <span class="comment">/*</span>
<a name="l01443"></a>01443 <span class="comment"> * Portmap defines</span>
<a name="l01444"></a>01444 <span class="comment"> */</span>
<a name="l01445"></a>01445 <span class="preprocessor">#define LIBNET_PMAP_PROGRAM 100000</span>
<a name="l01446"></a>01446 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_PMAP_PROC_NULL 0</span>
<a name="l01447"></a>01447 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_PMAP_PROC_SET 1</span>
<a name="l01448"></a>01448 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_PMAP_PROC_UNSET 2</span>
<a name="l01449"></a>01449 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_PMAP_PROC_GETADDR 3</span>
<a name="l01450"></a>01450 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_PMAP_PROC_DUMP 4</span>
<a name="l01451"></a>01451 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_PMAP_PROC_CALLIT 5</span>
<a name="l01452"></a>01452 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_PMAP_PROC_BCAST 5 </span><span class="comment">/* Not a typo */</span>
<a name="l01453"></a>01453 <span class="preprocessor">#define LIBNET_PMAP_PROC_GETTIME 6</span>
<a name="l01454"></a>01454 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_PMAP_PROC_UADDR2TADDR 7</span>
<a name="l01455"></a>01455 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_PMAP_PROC_TADDR2UADDR 8</span>
<a name="l01456"></a>01456 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_PMAP_PROC_GETVERSADDR 9</span>
<a name="l01457"></a>01457 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_PMAP_PROC_INDIRECT 10</span>
<a name="l01458"></a>01458 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_PMAP_PROC_GETADDRLIST 11</span>
<a name="l01459"></a>01459 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_PMAP_PROC_GETSTAT 12</span>
<a name="l01460"></a>01460 <span class="preprocessor"></span>
<a name="l01461"></a>01461 <span class="comment">/* There will be more to add... */</span>
<a name="l01462"></a>01462
<a name="l01463"></a>01463 <span class="keyword">struct </span>libnet_rpc_opaque_auth
<a name="l01464"></a>01464 {
<a name="l01465"></a>01465 u_int32_t rpc_auth_flavor;
<a name="l01466"></a>01466 u_int32_t rpc_auth_length;
<a name="l01467"></a>01467 <span class="preprocessor">#if 0</span>
<a name="l01468"></a>01468 <span class="preprocessor"></span> u_int8_t *rpc_auth_data;
<a name="l01469"></a>01469 <span class="preprocessor">#endif</span>
<a name="l01470"></a>01470 <span class="preprocessor"></span>};
<a name="l01471"></a>01471
<a name="l01472"></a>01472 <span class="keyword">struct </span>libnet_rpc_call
<a name="l01473"></a>01473 {
<a name="l01474"></a>01474 u_int32_t rpc_rpcvers; <span class="comment">/* RPC version - must be 2 */</span>
<a name="l01475"></a>01475 u_int32_t rpc_prognum; <span class="comment">/* Program Number */</span>
<a name="l01476"></a>01476 u_int32_t rpc_vers; <span class="comment">/* Program Version */</span>
<a name="l01477"></a>01477 u_int32_t rpc_procedure; <span class="comment">/* RPC procedure */</span>
<a name="l01478"></a>01478 <span class="keyword">struct </span>libnet_rpc_opaque_auth rpc_credentials;
<a name="l01479"></a>01479 <span class="keyword">struct </span>libnet_rpc_opaque_auth rpc_verifier;
<a name="l01480"></a>01480 };
<a name="l01481"></a>01481
<a name="l01482"></a>01482 <span class="keyword">struct </span>libnet_rpc_call_hdr
<a name="l01483"></a>01483 {
<a name="l01484"></a>01484 u_int32_t rpc_xid; <span class="comment">/* xid (transaction identifier) */</span>
<a name="l01485"></a>01485 u_int32_t rpc_type;
<a name="l01486"></a>01486 <span class="keyword">struct </span>libnet_rpc_call rpc_call;
<a name="l01487"></a>01487 };
<a name="l01488"></a>01488
<a name="l01489"></a>01489 <span class="keyword">struct </span>libnet_rpc_call_tcp_hdr
<a name="l01490"></a>01490 {
<a name="l01491"></a>01491 u_int32_t rpc_record_marking; <span class="comment">/* used with byte stream protocols */</span>
<a name="l01492"></a>01492 <span class="keyword">struct </span>libnet_rpc_call_hdr rpc_common;
<a name="l01493"></a>01493 };
<a name="l01494"></a>01494
<a name="l01495"></a>01495 <span class="comment">/*</span>
<a name="l01496"></a>01496 <span class="comment"> * STP configuration header</span>
<a name="l01497"></a>01497 <span class="comment"> * Spanning Tree Protocol</span>
<a name="l01498"></a>01498 <span class="comment"> * Static header size: 35 bytes</span>
<a name="l01499"></a>01499 <span class="comment"> */</span>
<a name="l01500"></a>01500 <span class="keyword">struct </span>libnet_stp_conf_hdr
<a name="l01501"></a>01501 {
<a name="l01502"></a>01502 u_int16_t stp_id; <span class="comment">/* protocol id */</span>
<a name="l01503"></a>01503 u_int8_t stp_version; <span class="comment">/* protocol version */</span>
<a name="l01504"></a>01504 u_int8_t stp_bpdu_type; <span class="comment">/* bridge protocol data unit type */</span>
<a name="l01505"></a>01505 u_int8_t stp_flags; <span class="comment">/* control flags */</span>
<a name="l01506"></a>01506 u_int8_t stp_rootid[8]; <span class="comment">/* root id */</span>
<a name="l01507"></a>01507 u_int32_t stp_rootpc; <span class="comment">/* root path cost */</span>
<a name="l01508"></a>01508 u_int8_t stp_bridgeid[8]; <span class="comment">/* bridge id */</span>
<a name="l01509"></a>01509 u_int16_t stp_portid; <span class="comment">/* port id */</span>
<a name="l01510"></a>01510 u_int16_t stp_mage; <span class="comment">/* message age */</span>
<a name="l01511"></a>01511 u_int16_t stp_maxage; <span class="comment">/* max age */</span>
<a name="l01512"></a>01512 u_int16_t stp_hellot; <span class="comment">/* hello time */</span>
<a name="l01513"></a>01513 u_int16_t stp_fdelay; <span class="comment">/* forward delay */</span>
<a name="l01514"></a>01514 };
<a name="l01515"></a>01515
<a name="l01516"></a>01516
<a name="l01517"></a>01517 <span class="comment">/*</span>
<a name="l01518"></a>01518 <span class="comment"> * STP topology change notification header</span>
<a name="l01519"></a>01519 <span class="comment"> * Spanning Tree Protocol</span>
<a name="l01520"></a>01520 <span class="comment"> * Static header size: 4 bytes</span>
<a name="l01521"></a>01521 <span class="comment"> */</span>
<a name="l01522"></a>01522 <span class="keyword">struct </span>libnet_stp_tcn_hdr
<a name="l01523"></a>01523 {
<a name="l01524"></a>01524 u_int16_t stp_id; <span class="comment">/* protocol id */</span>
<a name="l01525"></a>01525 u_int8_t stp_version; <span class="comment">/* protocol version */</span>
<a name="l01526"></a>01526 u_int8_t stp_bpdu_type; <span class="comment">/* bridge protocol data unit type */</span>
<a name="l01527"></a>01527 };
<a name="l01528"></a>01528
<a name="l01529"></a>01529
<a name="l01530"></a>01530 <span class="comment">/*</span>
<a name="l01531"></a>01531 <span class="comment"> * TCP header</span>
<a name="l01532"></a>01532 <span class="comment"> * Transmission Control Protocol</span>
<a name="l01533"></a>01533 <span class="comment"> * Static header size: 20 bytes</span>
<a name="l01534"></a>01534 <span class="comment"> */</span>
<a name="l01535"></a>01535 <span class="keyword">struct </span>libnet_tcp_hdr
<a name="l01536"></a>01536 {
<a name="l01537"></a>01537 u_int16_t th_sport; <span class="comment">/* source port */</span>
<a name="l01538"></a>01538 u_int16_t th_dport; <span class="comment">/* destination port */</span>
<a name="l01539"></a>01539 u_int32_t th_seq; <span class="comment">/* sequence number */</span>
<a name="l01540"></a>01540 u_int32_t th_ack; <span class="comment">/* acknowledgement number */</span>
<a name="l01541"></a>01541 <span class="preprocessor">#if (LIBNET_LIL_ENDIAN)</span>
<a name="l01542"></a>01542 <span class="preprocessor"></span> u_int8_t th_x2:4, <span class="comment">/* (unused) */</span>
<a name="l01543"></a>01543 th_off:4; <span class="comment">/* data offset */</span>
<a name="l01544"></a>01544 <span class="preprocessor">#endif</span>
<a name="l01545"></a>01545 <span class="preprocessor"></span><span class="preprocessor">#if (LIBNET_BIG_ENDIAN)</span>
<a name="l01546"></a>01546 <span class="preprocessor"></span> u_int8_t th_off:4, <span class="comment">/* data offset */</span>
<a name="l01547"></a>01547 th_x2:4; <span class="comment">/* (unused) */</span>
<a name="l01548"></a>01548 <span class="preprocessor">#endif</span>
<a name="l01549"></a>01549 <span class="preprocessor"></span> u_int8_t th_flags; <span class="comment">/* control flags */</span>
<a name="l01550"></a>01550 <span class="preprocessor">#ifndef TH_FIN</span>
<a name="l01551"></a>01551 <span class="preprocessor"></span><span class="preprocessor">#define TH_FIN 0x01 </span><span class="comment">/* finished send data */</span>
<a name="l01552"></a>01552 <span class="preprocessor">#endif</span>
<a name="l01553"></a>01553 <span class="preprocessor"></span><span class="preprocessor">#ifndef TH_SYN</span>
<a name="l01554"></a>01554 <span class="preprocessor"></span><span class="preprocessor">#define TH_SYN 0x02 </span><span class="comment">/* synchronize sequence numbers */</span>
<a name="l01555"></a>01555 <span class="preprocessor">#endif</span>
<a name="l01556"></a>01556 <span class="preprocessor"></span><span class="preprocessor">#ifndef TH_RST</span>
<a name="l01557"></a>01557 <span class="preprocessor"></span><span class="preprocessor">#define TH_RST 0x04 </span><span class="comment">/* reset the connection */</span>
<a name="l01558"></a>01558 <span class="preprocessor">#endif</span>
<a name="l01559"></a>01559 <span class="preprocessor"></span><span class="preprocessor">#ifndef TH_PUSH</span>
<a name="l01560"></a>01560 <span class="preprocessor"></span><span class="preprocessor">#define TH_PUSH 0x08 </span><span class="comment">/* push data to the app layer */</span>
<a name="l01561"></a>01561 <span class="preprocessor">#endif</span>
<a name="l01562"></a>01562 <span class="preprocessor"></span><span class="preprocessor">#ifndef TH_ACK</span>
<a name="l01563"></a>01563 <span class="preprocessor"></span><span class="preprocessor">#define TH_ACK 0x10 </span><span class="comment">/* acknowledge */</span>
<a name="l01564"></a>01564 <span class="preprocessor">#endif</span>
<a name="l01565"></a>01565 <span class="preprocessor"></span><span class="preprocessor">#ifndef TH_URG</span>
<a name="l01566"></a>01566 <span class="preprocessor"></span><span class="preprocessor">#define TH_URG 0x20 </span><span class="comment">/* urgent! */</span>
<a name="l01567"></a>01567 <span class="preprocessor">#endif</span>
<a name="l01568"></a>01568 <span class="preprocessor"></span><span class="preprocessor">#ifndef TH_ECE</span>
<a name="l01569"></a>01569 <span class="preprocessor"></span><span class="preprocessor">#define TH_ECE 0x40</span>
<a name="l01570"></a>01570 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l01571"></a>01571 <span class="preprocessor"></span><span class="preprocessor">#ifndef TH_CWR </span>
<a name="l01572"></a>01572 <span class="preprocessor"></span><span class="preprocessor">#define TH_CWR 0x80</span>
<a name="l01573"></a>01573 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l01574"></a>01574 <span class="preprocessor"></span> u_int16_t th_win; <span class="comment">/* window */</span>
<a name="l01575"></a>01575 u_int16_t th_sum; <span class="comment">/* checksum */</span>
<a name="l01576"></a>01576 u_int16_t th_urp; <span class="comment">/* urgent pointer */</span>
<a name="l01577"></a>01577 };
<a name="l01578"></a>01578
<a name="l01579"></a>01579 <span class="comment">/*</span>
<a name="l01580"></a>01580 <span class="comment"> * Token Ring Header</span>
<a name="l01581"></a>01581 <span class="comment"> */</span>
<a name="l01582"></a>01582 <span class="keyword">struct </span>libnet_token_ring_hdr
<a name="l01583"></a>01583 {
<a name="l01584"></a>01584 u_int8_t token_ring_access_control;
<a name="l01585"></a>01585 <span class="preprocessor">#define LIBNET_TOKEN_RING_FRAME 0x10</span>
<a name="l01586"></a>01586 <span class="preprocessor"></span> u_int8_t token_ring_frame_control;
<a name="l01587"></a>01587 <span class="preprocessor">#define LIBNET_TOKEN_RING_LLC_FRAME 0x40</span>
<a name="l01588"></a>01588 <span class="preprocessor"></span> u_int8_t token_ring_dhost[TOKEN_RING_ADDR_LEN];
<a name="l01589"></a>01589 u_int8_t token_ring_shost[TOKEN_RING_ADDR_LEN];
<a name="l01590"></a>01590 u_int8_t token_ring_llc_dsap;
<a name="l01591"></a>01591 u_int8_t token_ring_llc_ssap;
<a name="l01592"></a>01592 u_int8_t token_ring_llc_control_field;
<a name="l01593"></a>01593 u_int8_t token_ring_llc_org_code[LIBNET_ORG_CODE_SIZE];
<a name="l01594"></a>01594 u_int16_t token_ring_type;
<a name="l01595"></a>01595 <span class="preprocessor">#define TOKEN_RING_TYPE_IP 0x0800 </span><span class="comment">/* IP protocol */</span>
<a name="l01596"></a>01596 <span class="preprocessor">#define TOKEN_RING_TYPE_ARP 0x0806 </span><span class="comment">/* addr. resolution protocol */</span>
<a name="l01597"></a>01597 <span class="preprocessor">#define TOKEN_RING_TYPE_REVARP 0x8035 </span><span class="comment">/* reverse addr. resolution protocol */</span>
<a name="l01598"></a>01598 };
<a name="l01599"></a>01599
<a name="l01600"></a>01600 <span class="keyword">struct </span>libnet_token_ring_addr
<a name="l01601"></a>01601 {
<a name="l01602"></a>01602 u_int8_t token_ring_addr_octet[6]; <span class="comment">/* Token Ring address */</span>
<a name="l01603"></a>01603 };
<a name="l01604"></a>01604
<a name="l01605"></a>01605 <span class="comment">/*</span>
<a name="l01606"></a>01606 <span class="comment"> * UDP header</span>
<a name="l01607"></a>01607 <span class="comment"> * User Data Protocol</span>
<a name="l01608"></a>01608 <span class="comment"> * Static header size: 8 bytes</span>
<a name="l01609"></a>01609 <span class="comment"> */</span>
<a name="l01610"></a>01610 <span class="keyword">struct </span>libnet_udp_hdr
<a name="l01611"></a>01611 {
<a name="l01612"></a>01612 u_int16_t uh_sport; <span class="comment">/* soure port */</span>
<a name="l01613"></a>01613 u_int16_t uh_dport; <span class="comment">/* destination port */</span>
<a name="l01614"></a>01614 u_int16_t uh_ulen; <span class="comment">/* length */</span>
<a name="l01615"></a>01615 u_int16_t uh_sum; <span class="comment">/* checksum */</span>
<a name="l01616"></a>01616 };
<a name="l01617"></a>01617
<a name="l01618"></a>01618 <span class="comment">/*</span>
<a name="l01619"></a>01619 <span class="comment"> * Sebek header</span>
<a name="l01620"></a>01620 <span class="comment"> * Static header size: 48 bytes</span>
<a name="l01621"></a>01621 <span class="comment"> */</span>
<a name="l01622"></a>01622 <span class="keyword">struct </span>libnet_sebek_hdr
<a name="l01623"></a>01623 {
<a name="l01624"></a>01624 u_int32_t magic; <span class="comment">/* identify packets that should be hidden */</span>
<a name="l01625"></a>01625 u_int16_t version; <span class="comment">/* protocol version, currently 1 */</span>
<a name="l01626"></a>01626 <span class="preprocessor">#define SEBEK_PROTO_VERSION 1</span>
<a name="l01627"></a>01627 <span class="preprocessor"></span> u_int16_t type; <span class="comment">/* type of record (read data is type 0, write data is type 1) */</span>
<a name="l01628"></a>01628 <span class="preprocessor">#define SEBEK_TYPE_READ 0 </span><span class="comment">/* Currently, only read is supported */</span>
<a name="l01629"></a>01629 <span class="preprocessor">#define SEBEK_TYPE_WRITE 1</span>
<a name="l01630"></a>01630 <span class="preprocessor"></span> u_int32_t counter; <span class="comment">/* PDU counter used to identify when packet are lost */</span>
<a name="l01631"></a>01631 u_int32_t time_sec; <span class="comment">/* seconds since EPOCH according to the honeypot */</span>
<a name="l01632"></a>01632 u_int32_t time_usec; <span class="comment">/* residual microseconds */</span>
<a name="l01633"></a>01633 u_int32_t pid; <span class="comment">/* PID */</span>
<a name="l01634"></a>01634 u_int32_t uid; <span class="comment">/* UID */</span>
<a name="l01635"></a>01635 u_int32_t fd; <span class="comment">/* FD */</span>
<a name="l01636"></a>01636 <span class="preprocessor">#define SEBEK_CMD_LENGTH 12</span>
<a name="l01637"></a>01637 <span class="preprocessor"></span> u_int8_t cmd[SEBEK_CMD_LENGTH]; <span class="comment">/* 12 first characters of the command */</span>
<a name="l01638"></a>01638 u_int32_t length; <span class="comment">/* length in bytes of the PDU's body */</span>
<a name="l01639"></a>01639 };
<a name="l01640"></a>01640
<a name="l01641"></a>01641
<a name="l01642"></a>01642 <span class="comment">/*</span>
<a name="l01643"></a>01643 <span class="comment"> * VRRP header</span>
<a name="l01644"></a>01644 <span class="comment"> * Virtual Router Redundancy Protocol</span>
<a name="l01645"></a>01645 <span class="comment"> * Static header size: 8 bytes</span>
<a name="l01646"></a>01646 <span class="comment"> */</span>
<a name="l01647"></a>01647 <span class="preprocessor">#ifndef IPPROTO_VRRP</span>
<a name="l01648"></a>01648 <span class="preprocessor"></span><span class="preprocessor">#define IPPROTO_VRRP 112 </span><span class="comment">/* not everyone's got this */</span>
<a name="l01649"></a>01649 <span class="preprocessor">#endif</span>
<a name="l01650"></a>01650 <span class="preprocessor"></span><span class="keyword">struct </span>libnet_vrrp_hdr
<a name="l01651"></a>01651 {
<a name="l01652"></a>01652 <span class="preprocessor">#if (LIBNET_LIL_ENDIAN)</span>
<a name="l01653"></a>01653 <span class="preprocessor"></span> u_int8_t vrrp_v:4, <span class="comment">/* protocol version */</span>
<a name="l01654"></a>01654 vrrp_t:4; <span class="comment">/* packet type */</span>
<a name="l01655"></a>01655 <span class="preprocessor">#endif</span>
<a name="l01656"></a>01656 <span class="preprocessor"></span><span class="preprocessor">#if (LIBNET_BIG_ENDIAN)</span>
<a name="l01657"></a>01657 <span class="preprocessor"></span> u_int8_t vrrp_t:4, <span class="comment">/* packet type */</span>
<a name="l01658"></a>01658 vrrp_v:4; <span class="comment">/* protocol version */</span>
<a name="l01659"></a>01659 <span class="preprocessor">#endif</span>
<a name="l01660"></a>01660 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_VRRP_VERSION_01 0x1</span>
<a name="l01661"></a>01661 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_VRRP_VERSION_02 0x2</span>
<a name="l01662"></a>01662 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_VRRP_TYPE_ADVERT 0x1</span>
<a name="l01663"></a>01663 <span class="preprocessor"></span> u_int8_t vrrp_vrouter_id; <span class="comment">/* virtual router id */</span>
<a name="l01664"></a>01664 u_int8_t vrrp_priority; <span class="comment">/* priority */</span>
<a name="l01665"></a>01665 u_int8_t vrrp_ip_count; <span class="comment">/* number of IP addresses */</span>
<a name="l01666"></a>01666 u_int8_t vrrp_auth_type; <span class="comment">/* authorization type */</span>
<a name="l01667"></a>01667 <span class="preprocessor">#define LIBNET_VRRP_AUTH_NONE 0x1</span>
<a name="l01668"></a>01668 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_VRRP_AUTH_PASSWD 0x2</span>
<a name="l01669"></a>01669 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_VRRP_AUTH_IPAH 0x3</span>
<a name="l01670"></a>01670 <span class="preprocessor"></span> u_int8_t vrrp_advert_int; <span class="comment">/* advertisement interval */</span>
<a name="l01671"></a>01671 u_int16_t vrrp_sum; <span class="comment">/* checksum */</span>
<a name="l01672"></a>01672 <span class="comment">/* additional addresses */</span>
<a name="l01673"></a>01673 <span class="comment">/* authentication info */</span>
<a name="l01674"></a>01674 };
<a name="l01675"></a>01675
<a name="l01676"></a>01676
<a name="l01677"></a>01677 <span class="comment">/*</span>
<a name="l01678"></a>01678 <span class="comment"> * HSRP header</span>
<a name="l01679"></a>01679 <span class="comment"> * Static header size: 20 bytes</span>
<a name="l01680"></a>01680 <span class="comment"> */</span>
<a name="l01681"></a>01681 <span class="keyword">struct </span>libnet_hsrp_hdr
<a name="l01682"></a>01682 {
<a name="l01683"></a>01683 <span class="preprocessor">#define LIBNET_HSRP_VERSION 0x0</span>
<a name="l01684"></a>01684 <span class="preprocessor"></span> u_int8_t version; <span class="comment">/* Version of the HSRP messages */</span>
<a name="l01685"></a>01685 <span class="preprocessor">#define LIBNET_HSRP_TYPE_HELLO 0x0</span>
<a name="l01686"></a>01686 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_HSRP_TYPE_COUP 0x1</span>
<a name="l01687"></a>01687 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_HSRP_TYPE_RESIGN 0x2</span>
<a name="l01688"></a>01688 <span class="preprocessor"></span> u_int8_t opcode; <span class="comment">/* Type of message */</span>
<a name="l01689"></a>01689 <span class="preprocessor">#define LIBNET_HSRP_STATE_INITIAL 0x0</span>
<a name="l01690"></a>01690 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_HSRP_STATE_LEARN 0x1</span>
<a name="l01691"></a>01691 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_HSRP_STATE_LISTEN 0x2</span>
<a name="l01692"></a>01692 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_HSRP_STATE_SPEAK 0x4</span>
<a name="l01693"></a>01693 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_HSRP_STATE_STANDBY 0x8</span>
<a name="l01694"></a>01694 <span class="preprocessor"></span><span class="preprocessor">#define LIBNET_HSRP_STATE_ACTIVE 0x10</span>
<a name="l01695"></a>01695 <span class="preprocessor"></span> u_int8_t state; <span class="comment">/* Current state of the router */</span>
<a name="l01696"></a>01696 u_int8_t hello_time; <span class="comment">/* Period in seconds between hello messages */</span>
<a name="l01697"></a>01697 u_int8_t hold_time; <span class="comment">/* Seconds that the current hello message is valid */</span>
<a name="l01698"></a>01698 u_int8_t priority; <span class="comment">/* Priority for the election proccess */</span>
<a name="l01699"></a>01699 u_int8_t group; <span class="comment">/* Standby group */</span>
<a name="l01700"></a>01700 u_int8_t reserved; <span class="comment">/* Reserved field */</span>
<a name="l01701"></a>01701 <span class="preprocessor">#define HSRP_AUTHDATA_LENGTH 8 </span>
<a name="l01702"></a>01702 <span class="preprocessor"></span> u_int8_t authdata[HSRP_AUTHDATA_LENGTH]; <span class="comment">/* Password */</span>
<a name="l01703"></a>01703 u_int32_t virtual_ip; <span class="comment">/* Virtual IP address */</span>
<a name="l01704"></a>01704 };
<a name="l01705"></a>01705
<a name="l01706"></a>01706 <span class="preprocessor">#endif </span><span class="comment">/* __LIBNET_HEADERS_H */</span>
<a name="l01707"></a>01707
<a name="l01708"></a>01708 <span class="comment">/* EOF */</span>
</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Tue Jun 9 16:16:39 2009 for libnet by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
</body>
</html>
|