This file is indexed.

/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&nbsp;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 &lt;mike@infonexus.com&gt;</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 &amp; 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 (&amp;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"> *  &amp; 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&nbsp;
<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>