mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2025-11-16 12:34:34 +00:00
Compare commits
591 Commits
STABLE-2_1
...
STABLE-2_2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0a0452b2c3 | ||
|
|
c0cf130bb7 | ||
|
|
3eeda139bc | ||
|
|
b92faffaaa | ||
|
|
84fde1ebbf | ||
|
|
2a3711a566 | ||
|
|
1a5dffb931 | ||
|
|
bfcbf80221 | ||
|
|
657c9735a7 | ||
|
|
9672405eb9 | ||
|
|
e29870c15e | ||
|
|
f84076b112 | ||
|
|
c2f9244137 | ||
|
|
5514d8eb63 | ||
|
|
911da26f96 | ||
|
|
2e3dcf06d1 | ||
|
|
e3a20b3bc2 | ||
|
|
1c5cc7bc02 | ||
|
|
3aa82745c1 | ||
|
|
90b2a6b4c4 | ||
|
|
5231c8da23 | ||
|
|
00f5e179b5 | ||
|
|
90c9a482a6 | ||
|
|
724cc173ca | ||
|
|
187e4ededd | ||
|
|
f50c87da6f | ||
|
|
a6874a46c6 | ||
|
|
3a9c1e48dd | ||
|
|
59ec032fa9 | ||
|
|
64f75dbd89 | ||
|
|
a9664395b0 | ||
|
|
6b734bbb2c | ||
|
|
d8d1e4a015 | ||
|
|
95a63bc352 | ||
|
|
e8b0324f81 | ||
|
|
0f2de1f684 | ||
|
|
427b4f9b08 | ||
|
|
6a350a0278 | ||
|
|
3fe8d2fc43 | ||
|
|
eaf4926239 | ||
|
|
e6341a6081 | ||
|
|
790b914fea | ||
|
|
4b7a54c06c | ||
|
|
239918ccc1 | ||
|
|
876517ea3e | ||
|
|
234d282936 | ||
|
|
52b4649636 | ||
|
|
124dc0a64e | ||
|
|
7807402899 | ||
|
|
215dec653b | ||
|
|
a55679224f | ||
|
|
34e435c786 | ||
|
|
7c3aab2ea2 | ||
|
|
62ac0faad8 | ||
|
|
5ab46f82f9 | ||
|
|
7e96691ccf | ||
|
|
9f7d9170c1 | ||
|
|
63d21c53e5 | ||
|
|
562431b034 | ||
|
|
ff28f73fa0 | ||
|
|
853258fff0 | ||
|
|
7c84799c4f | ||
|
|
17413c28b4 | ||
|
|
5b9159ce0d | ||
|
|
754d628f2d | ||
|
|
b0361f14c1 | ||
|
|
2711dbcac0 | ||
|
|
e594742801 | ||
|
|
759c38b956 | ||
|
|
089697bb1c | ||
|
|
f3300731be | ||
|
|
553fedd443 | ||
|
|
53c09fe921 | ||
|
|
3636b3e2d1 | ||
|
|
fdcfb9bdce | ||
|
|
a44fcb2e2e | ||
|
|
a72fc743ef | ||
|
|
601e1bb326 | ||
|
|
12506cda7d | ||
|
|
e8741da9d2 | ||
|
|
39a9c5a3c5 | ||
|
|
7ec4e9be30 | ||
|
|
bb5ee3783a | ||
|
|
a8e8ce4108 | ||
|
|
919dc2019a | ||
|
|
b538bff383 | ||
|
|
b9056e148e | ||
|
|
3a788b6e8b | ||
|
|
fa5ca55c9d | ||
|
|
b0e347158d | ||
|
|
0056522cc9 | ||
|
|
8a900aa81f | ||
|
|
3ff267fbed | ||
|
|
c7e1b35899 | ||
|
|
18b1178e0c | ||
|
|
f924c43621 | ||
|
|
79c8a04152 | ||
|
|
ccea55370a | ||
|
|
4a169109a7 | ||
|
|
b5176936c7 | ||
|
|
3666dcc66c | ||
|
|
1f4a029d10 | ||
|
|
d7a0757764 | ||
|
|
600e248f06 | ||
|
|
988ce1e80e | ||
|
|
e02d126b07 | ||
|
|
74231d6873 | ||
|
|
7a2923020f | ||
|
|
12b45506dd | ||
|
|
9aae444f49 | ||
|
|
3e098f90df | ||
|
|
6fee08daab | ||
|
|
b00a05d086 | ||
|
|
fc5b6f7b0e | ||
|
|
9b040624c0 | ||
|
|
69725292a0 | ||
|
|
89dca4588f | ||
|
|
fdd702e61b | ||
|
|
1678b21a94 | ||
|
|
f7ff2d416c | ||
|
|
651d0af0b6 | ||
|
|
c825eb3604 | ||
|
|
21fba21054 | ||
|
|
b5618c51ca | ||
|
|
ecab77654a | ||
|
|
7b77378ed8 | ||
|
|
d0c214feff | ||
|
|
35550eeab3 | ||
|
|
c6777547f6 | ||
|
|
2d0c49adca | ||
|
|
d6a37b1ad6 | ||
|
|
45332ab38c | ||
|
|
63fb3721ef | ||
|
|
c748395bda | ||
|
|
d1fc5c2ec4 | ||
|
|
9a9d92a59e | ||
|
|
3013e1fc19 | ||
|
|
a4514cf416 | ||
|
|
332119d7e0 | ||
|
|
e239222775 | ||
|
|
72d9132ecf | ||
|
|
a494b990da | ||
|
|
a9f19cd7f1 | ||
|
|
22f13c24aa | ||
|
|
dbb7c00aa5 | ||
|
|
c18a8dc9cc | ||
|
|
b2d1fc119d | ||
|
|
7f91a71eca | ||
|
|
34156e0594 | ||
|
|
5ad2f06333 | ||
|
|
c5021bdc4d | ||
|
|
3b57750715 | ||
|
|
9b7cba9643 | ||
|
|
6584002826 | ||
|
|
e801307738 | ||
|
|
a39ce0f53b | ||
|
|
51c6548631 | ||
|
|
90874392e3 | ||
|
|
b8640678d6 | ||
|
|
331fe2dea2 | ||
|
|
7633c24213 | ||
|
|
39cb84466d | ||
|
|
012fadd77f | ||
|
|
6b30cf62cc | ||
|
|
5bf9cebb54 | ||
|
|
7c0c3879b2 | ||
|
|
3779cf7856 | ||
|
|
88ac7460f0 | ||
|
|
bedb4e4745 | ||
|
|
729b3da96d | ||
|
|
49bbc2d4bf | ||
|
|
678a7a4044 | ||
|
|
c385f31076 | ||
|
|
264a5a3e97 | ||
|
|
047f3b3306 | ||
|
|
5b7524e10e | ||
|
|
8363c24e45 | ||
|
|
2bf8fcd7c2 | ||
|
|
942ca825d0 | ||
|
|
776e612872 | ||
|
|
ec5f3a1563 | ||
|
|
0bda621d3d | ||
|
|
2faa2d7009 | ||
|
|
8fe567b86f | ||
|
|
e2ae25d158 | ||
|
|
90b3e45c31 | ||
|
|
a49c347b7e | ||
|
|
488d4ad246 | ||
|
|
bc1da0bddb | ||
|
|
489405839a | ||
|
|
dd913250a9 | ||
|
|
b58e0061e0 | ||
|
|
ff67ce6e07 | ||
|
|
0b370fbade | ||
|
|
e80d4ff2cc | ||
|
|
ea111c511e | ||
|
|
9b1056ef0e | ||
|
|
0ed8f754c5 | ||
|
|
897bcb7d4e | ||
|
|
3f47b04f16 | ||
|
|
c8fda8d46c | ||
|
|
cfe5ce9d49 | ||
|
|
cd140b1105 | ||
|
|
f36e51e9c9 | ||
|
|
003d34eebd | ||
|
|
e30d50710d | ||
|
|
003f5cc12d | ||
|
|
b795784832 | ||
|
|
412c8d1902 | ||
|
|
34352e9649 | ||
|
|
33f2b313c7 | ||
|
|
87618e2f2a | ||
|
|
21cde5dc9e | ||
|
|
74cd9a8644 | ||
|
|
2e175a23cb | ||
|
|
adbc5b5f71 | ||
|
|
a02f34a193 | ||
|
|
a9052caf10 | ||
|
|
0192fe773e | ||
|
|
349c077feb | ||
|
|
349ec76ee5 | ||
|
|
d05be56a50 | ||
|
|
a07e0a82c9 | ||
|
|
fc85b055d7 | ||
|
|
9b5a6fe1dc | ||
|
|
04cf6bbe66 | ||
|
|
ea9726056c | ||
|
|
1ffcc5079c | ||
|
|
d6a6b661d9 | ||
|
|
69c4c8a074 | ||
|
|
8e0c6cd164 | ||
|
|
6e7ea92d56 | ||
|
|
d281d3e959 | ||
|
|
2ee3cbe69c | ||
|
|
5e52d1a4b1 | ||
|
|
cc6d5b7a29 | ||
|
|
d843e47a1d | ||
|
|
4f30e0daff | ||
|
|
a9ac18aebb | ||
|
|
3034e9fad0 | ||
|
|
064d816ea1 | ||
|
|
84228d4f4b | ||
|
|
dc41eabf5f | ||
|
|
b3046d938e | ||
|
|
177bb6ca06 | ||
|
|
4c15191b1d | ||
|
|
5de4967f23 | ||
|
|
38894637e7 | ||
|
|
61c67fc229 | ||
|
|
695c323164 | ||
|
|
75b2db4438 | ||
|
|
0f5bf0aa37 | ||
|
|
8d7e436a9d | ||
|
|
32a72b1a20 | ||
|
|
3b2d7e289a | ||
|
|
a4b578b483 | ||
|
|
dae8eb8d6e | ||
|
|
d6b5b5222f | ||
|
|
8a8058a436 | ||
|
|
bb31fbd737 | ||
|
|
bf1285e3c9 | ||
|
|
827b60c155 | ||
|
|
b43f081b9a | ||
|
|
5c2887a241 | ||
|
|
555812dcec | ||
|
|
f857260e29 | ||
|
|
2be031e238 | ||
|
|
dc7ba26e69 | ||
|
|
316dbc792f | ||
|
|
f97dacd014 | ||
|
|
d84a84e5ca | ||
|
|
44a3f631b3 | ||
|
|
a9e73bc412 | ||
|
|
4528215c99 | ||
|
|
fbe032d05d | ||
|
|
4baf17d5b2 | ||
|
|
4ca115a08e | ||
|
|
2441c6fa3f | ||
|
|
6302423d7f | ||
|
|
9301225895 | ||
|
|
e85e473838 | ||
|
|
710b7fc158 | ||
|
|
cd278c426d | ||
|
|
aa79b90d3c | ||
|
|
a2498898b0 | ||
|
|
cb3f0a9b17 | ||
|
|
0caacf82b4 | ||
|
|
e0be5a7f6d | ||
|
|
2b6d9a56f7 | ||
|
|
f47d2ed5fe | ||
|
|
af0499131f | ||
|
|
30d445bd39 | ||
|
|
05ffe144dd | ||
|
|
e09add37c1 | ||
|
|
eaa8f34f6a | ||
|
|
fe25ca66af | ||
|
|
bef201e162 | ||
|
|
03998f5147 | ||
|
|
79cd89f99d | ||
|
|
7fd158a109 | ||
|
|
0aad45593f | ||
|
|
785b7aba3c | ||
|
|
f92d6702bc | ||
|
|
c4f33be3f3 | ||
|
|
19e22f870f | ||
|
|
2f5305c259 | ||
|
|
602a66fe58 | ||
|
|
f126750ccd | ||
|
|
c53a8444e8 | ||
|
|
6b3ed88d9c | ||
|
|
fa6f8054eb | ||
|
|
8291ff3dc0 | ||
|
|
9dca4a0211 | ||
|
|
3546a0a4a0 | ||
|
|
5465fdfd69 | ||
|
|
f37925dad2 | ||
|
|
2ebebe7287 | ||
|
|
aa545fbbc6 | ||
|
|
832490eec8 | ||
|
|
edeeef0d20 | ||
|
|
b3a939417e | ||
|
|
0255106d55 | ||
|
|
ff17530997 | ||
|
|
3d7ff53070 | ||
|
|
295996f912 | ||
|
|
534d3a794c | ||
|
|
fc8f6e8fd9 | ||
|
|
df0699c143 | ||
|
|
156bb74d17 | ||
|
|
224b884c1e | ||
|
|
c156cd2a33 | ||
|
|
46bbfe4ee2 | ||
|
|
2229c51704 | ||
|
|
af5906370f | ||
|
|
ec11b289cb | ||
|
|
c594599350 | ||
|
|
53818ad3e4 | ||
|
|
bda6909df8 | ||
|
|
ecd8c5b936 | ||
|
|
d0d86b5ba1 | ||
|
|
aa7009b2fc | ||
|
|
4f6fd6c845 | ||
|
|
ff93961ff4 | ||
|
|
4b10b4dab3 | ||
|
|
a329bdd607 | ||
|
|
3b5eb7ca90 | ||
|
|
752cdb1a53 | ||
|
|
e479bd56df | ||
|
|
049cae841d | ||
|
|
a7b06bef5f | ||
|
|
32bc761245 | ||
|
|
8a08c4cd4f | ||
|
|
71f56714dd | ||
|
|
95dbe78821 | ||
|
|
c03e949ca9 | ||
|
|
3f4e183e3f | ||
|
|
78a0a62484 | ||
|
|
27c226b5d6 | ||
|
|
dc607c5be4 | ||
|
|
aa4668cc47 | ||
|
|
cbc80a0920 | ||
|
|
b1d3dcb8d7 | ||
|
|
5666f305ce | ||
|
|
8e86555f93 | ||
|
|
b4be0d8808 | ||
|
|
9263d44847 | ||
|
|
8f2f43f093 | ||
|
|
3cb6ae7770 | ||
|
|
b04d8a6a6c | ||
|
|
b298afabdc | ||
|
|
2037ec371c | ||
|
|
2cc420e434 | ||
|
|
ed561a578b | ||
|
|
3e59b224fa | ||
|
|
4c19a909c2 | ||
|
|
941300c21c | ||
|
|
3efc43531b | ||
|
|
a215eba50e | ||
|
|
8bf2e21b4d | ||
|
|
926e399355 | ||
|
|
ea14b774c8 | ||
|
|
d504e27142 | ||
|
|
2f098c42a7 | ||
|
|
c02fea0961 | ||
|
|
48615984c7 | ||
|
|
7eab5947af | ||
|
|
96548ede2b | ||
|
|
2ff0db9a9b | ||
|
|
91037b4c28 | ||
|
|
75f33081c2 | ||
|
|
dcb29c591f | ||
|
|
282389a332 | ||
|
|
930eb27ba7 | ||
|
|
aaf7f03d95 | ||
|
|
0df4109074 | ||
|
|
781a4ccb62 | ||
|
|
c79af6e53e | ||
|
|
982b86fa48 | ||
|
|
92a18bf638 | ||
|
|
3f583a1757 | ||
|
|
6f232b7c3f | ||
|
|
54448559bb | ||
|
|
7859c6832b | ||
|
|
d116d235a5 | ||
|
|
b1fbb5ad45 | ||
|
|
e31f1b918c | ||
|
|
45a055840d | ||
|
|
5da6c0cfd0 | ||
|
|
ef76bbe3f0 | ||
|
|
9071db11af | ||
|
|
ed59260b92 | ||
|
|
c23aa713f9 | ||
|
|
10e0130a4a | ||
|
|
b0c753da96 | ||
|
|
30b2d07362 | ||
|
|
ee1bab3411 | ||
|
|
3bd84aba4b | ||
|
|
4413576494 | ||
|
|
aa83bdf490 | ||
|
|
4adcd68ce4 | ||
|
|
19cbf2a652 | ||
|
|
593c02aed4 | ||
|
|
a09646c507 | ||
|
|
2a236088ae | ||
|
|
861ce296b9 | ||
|
|
530a4ccdce | ||
|
|
915e923809 | ||
|
|
d386388fb5 | ||
|
|
2adc6d2687 | ||
|
|
405fc4d802 | ||
|
|
ee7ed8c87d | ||
|
|
65eb36b10d | ||
|
|
16da67bb21 | ||
|
|
331368e3aa | ||
|
|
201e772e15 | ||
|
|
4289293061 | ||
|
|
4ea5110662 | ||
|
|
62fb2fd749 | ||
|
|
c4321330d0 | ||
|
|
3043d9d023 | ||
|
|
1a10a942f2 | ||
|
|
18b91b2841 | ||
|
|
a29fc52633 | ||
|
|
292bd85db6 | ||
|
|
1d2567c7bf | ||
|
|
7bcf0d3334 | ||
|
|
7869d7c5f7 | ||
|
|
98e31f7ba6 | ||
|
|
0e3bc53432 | ||
|
|
2e9c60b410 | ||
|
|
65033b6ba5 | ||
|
|
93c3cfd2b1 | ||
|
|
0df1559056 | ||
|
|
f72227aadc | ||
|
|
153c295b6f | ||
|
|
fe05be110d | ||
|
|
feee9d903a | ||
|
|
ba8d9b0018 | ||
|
|
ba705d3f7f | ||
|
|
33325bbf3b | ||
|
|
284659156d | ||
|
|
3c17c1e82e | ||
|
|
7c2267b966 | ||
|
|
48c2056d5b | ||
|
|
0c34597b9e | ||
|
|
26a84d9307 | ||
|
|
5698e57da3 | ||
|
|
ffbe075d56 | ||
|
|
fa37888da2 | ||
|
|
6e994f9df2 | ||
|
|
a352f4e11c | ||
|
|
a41c1fcc62 | ||
|
|
6b92dd6907 | ||
|
|
ec28364a2f | ||
|
|
ee2f5c52d1 | ||
|
|
36e2d2255e | ||
|
|
6a1fbc7433 | ||
|
|
2e7b4573a5 | ||
|
|
ff8d1a384f | ||
|
|
f6b728b24c | ||
|
|
688b0935e2 | ||
|
|
a6cf42a937 | ||
|
|
ef02b1dc20 | ||
|
|
06cc825431 | ||
|
|
64e0ede1a1 | ||
|
|
e0e4240875 | ||
|
|
3aef9c5305 | ||
|
|
f53932d7ca | ||
|
|
3f690e0bf0 | ||
|
|
95aba99f41 | ||
|
|
64bc2c3df7 | ||
|
|
413b26a7e1 | ||
|
|
5405c3d97d | ||
|
|
c05b07c314 | ||
|
|
8f8c0d26ef | ||
|
|
ca8f0254cf | ||
|
|
cf4cefd73c | ||
|
|
23945d2e3f | ||
|
|
daeceeeca0 | ||
|
|
5840b090d4 | ||
|
|
95eada2119 | ||
|
|
2e51e0dc81 | ||
|
|
9171960c11 | ||
|
|
0be3e35bf2 | ||
|
|
f098c4515e | ||
|
|
0ee4784d0c | ||
|
|
4edbec760a | ||
|
|
ee269ceec5 | ||
|
|
c2892ed0fb | ||
|
|
f99f304c20 | ||
|
|
8dd931ab27 | ||
|
|
fa76861481 | ||
|
|
f272a75b6a | ||
|
|
7c10065bd2 | ||
|
|
a0d7b01186 | ||
|
|
c35dd079ee | ||
|
|
31545ed787 | ||
|
|
ea1337d5a2 | ||
|
|
31dbc5722c | ||
|
|
22c1c4ec8d | ||
|
|
d03d4c16fb | ||
|
|
d33098a8d8 | ||
|
|
60afb13e60 | ||
|
|
f521d779fb | ||
|
|
ded63c12f1 | ||
|
|
ed999f0195 | ||
|
|
eeef3f65b8 | ||
|
|
a63a7d3c76 | ||
|
|
06016cc939 | ||
|
|
426a6004bf | ||
|
|
1bba969a4a | ||
|
|
1c5c2967e4 | ||
|
|
6826130d6f | ||
|
|
a63b5aeaa7 | ||
|
|
75bc361156 | ||
|
|
0528f68c6d | ||
|
|
8d05e22f9a | ||
|
|
b406a54389 | ||
|
|
e3cd915fb9 | ||
|
|
0d4e1beec4 | ||
|
|
e16cc67b70 | ||
|
|
39162c2d0c | ||
|
|
5a8ad9d4ba | ||
|
|
a3a4103d66 | ||
|
|
437e0a6756 | ||
|
|
d1da9ec5d3 | ||
|
|
684adaca29 | ||
|
|
f61e57965f | ||
|
|
27835fd798 | ||
|
|
ef5bc352fb | ||
|
|
65b1a395f4 | ||
|
|
a6dc31433e | ||
|
|
cba4e1f2a7 | ||
|
|
2124becd04 | ||
|
|
abcf42b655 | ||
|
|
c8808f69b2 | ||
|
|
5a8bd37509 | ||
|
|
6c2fd2d25d | ||
|
|
de81e8bf19 | ||
|
|
54fc708c76 | ||
|
|
7ba69d875c | ||
|
|
b2713601f0 | ||
|
|
c683427bfd | ||
|
|
0f100b8c5b | ||
|
|
ff44049baf | ||
|
|
a3cdf3c4cc | ||
|
|
015cff75fd | ||
|
|
7492bfb0dc | ||
|
|
67d4fc9ff0 | ||
|
|
d9c9b55766 | ||
|
|
1f554efcbb | ||
|
|
d4c8b3e7e8 | ||
|
|
5c4ada2098 | ||
|
|
562f875533 | ||
|
|
9a80c865b0 | ||
|
|
9c86302113 | ||
|
|
f8ed17082d | ||
|
|
7d1c26cc0c | ||
|
|
164210ab73 | ||
|
|
a47d30ffc7 | ||
|
|
a5c00e369d | ||
|
|
787a7bb919 | ||
|
|
730b3d3f86 | ||
|
|
0ef2514b6a | ||
|
|
7bd2c565e6 | ||
|
|
04ff7926e7 | ||
|
|
4b672a1f3c | ||
|
|
8068aab9f7 | ||
|
|
0244dc714b | ||
|
|
ac46e42aa2 | ||
|
|
dd1ab2bf59 |
6
.gitattributes
vendored
6
.gitattributes
vendored
@@ -2,3 +2,9 @@
|
||||
*.txt text
|
||||
*.c text
|
||||
*.h text
|
||||
|
||||
# For git archive
|
||||
.gitignore export-ignore
|
||||
.gitattributes export-ignore
|
||||
.github export-ignore
|
||||
.vscode export-ignore
|
||||
|
||||
43
.github/workflows/ci-linux.yml
vendored
Normal file
43
.github/workflows/ci-linux.yml
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
strategy:
|
||||
matrix:
|
||||
compiler: [gcc, clang]
|
||||
env:
|
||||
CC: ${{ matrix.compiler }}
|
||||
LSAN_OPTIONS: verbosity=1:log_threads=1
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Install deps
|
||||
run: sudo apt-get install check ninja-build doxygen
|
||||
|
||||
- name: Copy lwipcfg.h for example app
|
||||
run: cp contrib/examples/example_app/lwipcfg.h.ci contrib/examples/example_app/lwipcfg.h
|
||||
|
||||
- name: Build unit tests with make
|
||||
run: make -C contrib/ports/unix/check
|
||||
- name: Run unit tests
|
||||
run: make -C contrib/ports/unix/check check
|
||||
|
||||
- name: Run cmake
|
||||
run: mkdir build && cd build && cmake .. -G Ninja
|
||||
- name: Build with cmake
|
||||
run: cd build && cmake --build .
|
||||
- name: Build docs with cmake
|
||||
run: cd build && cmake --build . --target lwipdocs
|
||||
|
||||
- name: Validate combinations of options
|
||||
run: cd contrib/ports/unix/example_app && ./iteropts.sh
|
||||
|
||||
- name: Build the default example app
|
||||
run: |
|
||||
cp contrib/examples/example_app/lwipcfg.h.example contrib/examples/example_app/lwipcfg.h
|
||||
make -C contrib/ports/unix/example_app TESTFLAGS="-Wno-documentation" -j 4
|
||||
67
.gitignore
vendored
67
.gitignore
vendored
@@ -1,19 +1,60 @@
|
||||
*.o
|
||||
*.so
|
||||
*.a
|
||||
*.exe
|
||||
*lwip_unittests.xml
|
||||
*.suo
|
||||
*.log
|
||||
.depend*
|
||||
|
||||
/.vscode/ipch
|
||||
|
||||
/doc/doxygen/output/html
|
||||
/src/apps/snmp/LwipMibCompiler/CCodeGeneration/bin/
|
||||
/src/apps/snmp/LwipMibCompiler/CCodeGeneration/obj/
|
||||
/src/apps/snmp/LwipMibCompiler/LwipMibCompiler/bin/
|
||||
/src/apps/snmp/LwipMibCompiler/LwipMibCompiler/obj/
|
||||
/src/apps/snmp/LwipMibCompiler/MibViewer/bin/
|
||||
/src/apps/snmp/LwipMibCompiler/MibViewer/obj/
|
||||
/src/apps/snmp/LwipMibCompiler/LwipSnmpCodeGeneration/bin/
|
||||
/src/apps/snmp/LwipMibCompiler/LwipSnmpCodeGeneration/obj/
|
||||
/src/apps/snmp/LwipMibCompiler/SharpSnmpLib/bin/
|
||||
/src/apps/snmp/LwipMibCompiler/SharpSnmpLib/obj/
|
||||
/src/apps/snmp/LwipMibCompiler/LwipMibCompiler.userprefs
|
||||
/src/apps/snmp/LwipMibCompiler/*.suo
|
||||
|
||||
/test/fuzz/output
|
||||
/test/fuzz/lwip_fuzz
|
||||
/test/fuzz/lwip_fuzz2
|
||||
/test/fuzz/lwip_fuzz3
|
||||
/test/fuzz/.depend
|
||||
/build
|
||||
|
||||
/build
|
||||
|
||||
/contrib/examples/example_app/lwipcfg.h
|
||||
/contrib/examples/example_app/lwipopts_test.h
|
||||
|
||||
/contrib/ports/unix/example_app/build
|
||||
/contrib/ports/unix/example_app/example_app
|
||||
/contrib/ports/unix/example_app/makefsdata
|
||||
|
||||
/contrib/ports/unix/check/build
|
||||
/contrib/ports/unix/lib/build
|
||||
/contrib/ports/unix/check/lwip_unittests
|
||||
|
||||
/contrib/ports/win32/example_app/build
|
||||
/contrib/ports/win32/lwipcfg_msvc.h
|
||||
|
||||
/contrib/ports/win32/msvc/Debug
|
||||
/contrib/ports/win32/msvc/Debug unittests
|
||||
/contrib/ports/win32/msvc/Release
|
||||
/contrib/ports/win32/msvc/Release unittests
|
||||
/contrib/ports/win32/msvc/*.user
|
||||
/contrib/ports/win32/msvc/*.ncb
|
||||
/contrib/ports/win32/msvc/*.cache
|
||||
/contrib/ports/win32/msvc/*.suo
|
||||
/contrib/ports/win32/msvc/ipch
|
||||
/contrib/ports/win32/msvc/*.opensdf
|
||||
/contrib/ports/win32/msvc/*.sdf
|
||||
/contrib/ports/win32/mingw/*.map
|
||||
/contrib/ports/win32/mingw/cov-int
|
||||
/contrib/ports/win32/msvc/.vs
|
||||
/contrib/apps/LwipMibCompiler/.vs
|
||||
/contrib/apps/LwipMibCompiler/CCodeGeneration/bin
|
||||
/contrib/apps/LwipMibCompiler/CCodeGeneration/obj
|
||||
/contrib/apps/LwipMibCompiler/LwipMibCompiler/bin
|
||||
/contrib/apps/LwipMibCompiler/LwipMibCompiler/obj
|
||||
/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/bin
|
||||
/contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/obj
|
||||
/contrib/apps/LwipMibCompiler/MibViewer/bin
|
||||
/contrib/apps/LwipMibCompiler/MibViewer/obj
|
||||
/contrib/apps/LwipMibCompiler/SharpSnmpLib/bin
|
||||
/contrib/apps/LwipMibCompiler/SharpSnmpLib/obj
|
||||
|
||||
28
.vscode/c_cpp_properties.json
vendored
Normal file
28
.vscode/c_cpp_properties.json
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Linux",
|
||||
"includePath": [
|
||||
"${workspaceFolder}/src/include",
|
||||
"${workspaceFolder}/contrib",
|
||||
"${workspaceFolder}/contrib/examples/example_app",
|
||||
"${workspaceFolder}/contrib/ports/unix/port/include",
|
||||
"${workspaceFolder}/contrib/ports/unix/example_app"
|
||||
],
|
||||
"defines": [],
|
||||
"intelliSenseMode": "gcc-x64",
|
||||
"browse": {
|
||||
"path": [
|
||||
"${workspaceFolder}/**"
|
||||
],
|
||||
"limitSymbolsToIncludedHeaders": true,
|
||||
"databaseFilename": ""
|
||||
},
|
||||
"compilerPath": "/usr/bin/gcc",
|
||||
"cStandard": "c11",
|
||||
"cppStandard": "c++17",
|
||||
"configurationProvider": "vector-of-bool.cmake-tools"
|
||||
}
|
||||
],
|
||||
"version": 4
|
||||
}
|
||||
62
.vscode/launch.json
vendored
Normal file
62
.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,62 @@
|
||||
{
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "(gdb) Launch example_app",
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"args": [],
|
||||
"stopAtEntry": true,
|
||||
"environment": [],
|
||||
"externalConsole": true,
|
||||
"MIMode": "gdb",
|
||||
"preLaunchTask": "Build example_app",
|
||||
"setupCommands": [
|
||||
{
|
||||
"description": "Enable pretty-printing for gdb",
|
||||
"text": "-enable-pretty-printing",
|
||||
"ignoreFailures": true
|
||||
}
|
||||
],
|
||||
"linux": {
|
||||
"cwd": "${workspaceFolder}/build/contrib/ports/unix/example_app",
|
||||
"program": "${workspaceFolder}/build/contrib/ports/unix/example_app/example_app",
|
||||
},
|
||||
"windows": {
|
||||
"cwd": "${workspaceFolder}/build/contrib/ports/win32/example_app",
|
||||
"program": "${workspaceFolder}/build/contrib/ports/win32/example_app/example_app",
|
||||
"miDebuggerPath": "gdb.exe",
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "(gdb) Launch unit tests",
|
||||
"type": "cppdbg",
|
||||
"request": "launch",
|
||||
"args": [],
|
||||
"stopAtEntry": true,
|
||||
"environment": [],
|
||||
"externalConsole": false,
|
||||
"MIMode": "gdb",
|
||||
"preLaunchTask": "Build unit tests",
|
||||
"setupCommands": [
|
||||
{
|
||||
"description": "Enable pretty-printing for gdb",
|
||||
"text": "-enable-pretty-printing",
|
||||
"ignoreFailures": true
|
||||
}
|
||||
],
|
||||
"linux": {
|
||||
"cwd": "${workspaceFolder}/contrib/ports/unix/check/build",
|
||||
"program": "${workspaceFolder}/contrib/ports/unix/check/build/lwip_unittests",
|
||||
},
|
||||
"windows": {
|
||||
"cwd": "${workspaceFolder}/contrib/ports/win32/check/build",
|
||||
"program": "${workspaceFolder}/contrib/ports/win32/check/build/lwip_unittests",
|
||||
"miDebuggerPath": "gdb.exe",
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
10
.vscode/settings.json
vendored
Normal file
10
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"editor.tabSize": 2,
|
||||
"editor.insertSpaces": true,
|
||||
"files.insertFinalNewline": true,
|
||||
"files.trimFinalNewlines": true,
|
||||
"files.trimTrailingWhitespace": true,
|
||||
"files.associations": {
|
||||
"*.h": "c"
|
||||
}
|
||||
}
|
||||
54
.vscode/tasks.json
vendored
Normal file
54
.vscode/tasks.json
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
{
|
||||
// See https://go.microsoft.com/fwlink/?LinkId=733558
|
||||
// for the documentation about the tasks.json format
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "Build example_app",
|
||||
"type": "shell",
|
||||
"options": {
|
||||
"cwd": "${workspaceFolder}/build"
|
||||
},
|
||||
"problemMatcher": "$gcc",
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
},
|
||||
"command": "cmake --build ."
|
||||
},
|
||||
{
|
||||
"label": "Build unit tests",
|
||||
"type": "shell",
|
||||
"problemMatcher": "$gcc",
|
||||
"group": "build",
|
||||
"linux": {
|
||||
"options": {
|
||||
"cwd": "${workspaceFolder}/contrib/ports/unix/check/build"
|
||||
},
|
||||
},
|
||||
"windows": {
|
||||
"options": {
|
||||
"cwd": "${workspaceFolder}/contrib/ports/win32/check/build"
|
||||
},
|
||||
},
|
||||
"command": "cmake --build ."
|
||||
},
|
||||
{
|
||||
"label": "Configure example_app",
|
||||
"type": "shell",
|
||||
"problemMatcher": "$gcc",
|
||||
"group": "build",
|
||||
"command": "cd ${workspaceFolder}; mkdir build; cd build; cmake .."
|
||||
},
|
||||
{
|
||||
"label": "Generate documentation",
|
||||
"type": "shell",
|
||||
"problemMatcher": [],
|
||||
"group": "none",
|
||||
"options": {
|
||||
"cwd": "${workspaceFolder}/build"
|
||||
},
|
||||
"command": "cmake --build . --target lwipdocs"
|
||||
}
|
||||
]
|
||||
}
|
||||
119
BUILDING
Normal file
119
BUILDING
Normal file
@@ -0,0 +1,119 @@
|
||||
Building lwIP
|
||||
=============
|
||||
|
||||
lwIP uses a CMake based build system.
|
||||
|
||||
The CMake files in this project are designed to
|
||||
be included into your own CMake files. They are
|
||||
mainly variable definitions containing a list of
|
||||
source files and predefined static libraries to
|
||||
be linked against application code.
|
||||
|
||||
1) lwIP sources:
|
||||
src/Filelists.cmake provides file lists containing
|
||||
the lwIP core library.
|
||||
The file also contains two static libraries, lwipcore
|
||||
and lwipallapps, where you can link your app against.
|
||||
This is the file that is useful to all lwIP users.
|
||||
|
||||
2) Example applications:
|
||||
contrib/Filelists.cmake provides several file lists
|
||||
containing the example applications.
|
||||
The file also contains several static libraries
|
||||
for these example apps.
|
||||
This file is only useful for you, if you can use one
|
||||
of the examples in your application, which is normally
|
||||
not the case.
|
||||
|
||||
3) OS/platform port:
|
||||
Usually the OS port needs to be provided by the user.
|
||||
If a port to Linux, Windows or MacOS is useful for
|
||||
you, you can use
|
||||
contrib/ports/{win32, unix}/Filelists.cmake
|
||||
that contains file lists and libraries for
|
||||
these operating systems.
|
||||
|
||||
VARIABLES
|
||||
=========
|
||||
In all cases, you need to provide two variables.
|
||||
|
||||
"LWIP_DIR" pointing to the lwIP directory
|
||||
Example:
|
||||
set(LWIP_DIR ${CMAKE_CURRENT_SOURCE_DIR}/externals/lwip)
|
||||
|
||||
"LWIP_INCLUDE_DIRS" that contains the include base paths
|
||||
- for lwIP itself (${LWIP_DIR}/src/include)
|
||||
- for lwIP contrib if you use it (${LWIP_DIR}/contrib)
|
||||
- to a directory containing an OS port
|
||||
- to a directory containing lwipopts.h
|
||||
|
||||
Example:
|
||||
set (LWIP_INCLUDE_DIRS
|
||||
"${LWIP_DIR}/src/include"
|
||||
"${LWIP_DIR}/contrib"
|
||||
"${LWIP_DIR}/contrib/ports/unix/port/include"
|
||||
"${LWIP_DIR}/contrib/examples/example_app"
|
||||
)
|
||||
|
||||
Putting it all together
|
||||
=======================
|
||||
To get a working application, your CMake system
|
||||
needs to provide the variables described above, e.g.
|
||||
set (LWIP_DIR <path to lwip sources>)
|
||||
set (LWIP_INCLUDE_DIRS
|
||||
"${LWIP_DIR}/src/include"
|
||||
"${LWIP_DIR}/contrib"
|
||||
"<path to my port>/include"
|
||||
"<path to lwipopts.h>"
|
||||
)
|
||||
|
||||
You may add some defines:
|
||||
set (LWIP_DEFINITIONS LWIP_DEBUG=1)
|
||||
|
||||
Then include the filelists you need:
|
||||
include(${LWIP_DIR}/src/Filelists.cmake)
|
||||
include(${LWIP_DIR}/contrib/Filelists.cmake)
|
||||
|
||||
Then, declare you executable:
|
||||
add_executable(my_app <my source files> <my lwip port files>)
|
||||
|
||||
Add lwIP include dirs to your app:
|
||||
target_include_directories(my_app PRIVATE ${LWIP_INCLUDE_DIRS})
|
||||
|
||||
Link your app against the lwIP libs from the filelists you need:
|
||||
target_link_libraries(my_app lwipcontribapps lwipallapps lwipcore)
|
||||
|
||||
Working example
|
||||
===============
|
||||
Working build examples can be found in the
|
||||
contrib/ports/{win32, unix}/example_app
|
||||
subdirectory.
|
||||
To use them, create a build directory and call cmake with
|
||||
the lwIP root dir:
|
||||
|
||||
- mkdir build
|
||||
- cd build
|
||||
- cmake ..
|
||||
- cmake --build .
|
||||
|
||||
The CMakeLists.txt will autoselect the correct port
|
||||
for your system (supported: Linux, Windows, Darwin).
|
||||
|
||||
To configure the example app to your needs, you need to copy the file
|
||||
contrib/examples/example_app/lwipcfg.h.example
|
||||
to
|
||||
contrib/examples/example_app/lwipcfg.h
|
||||
and edit to your needs.
|
||||
|
||||
Makefile based build system
|
||||
===========================
|
||||
lwIP also maintains file lists for Makefile-based
|
||||
build systems. Look for Filelists.mk files
|
||||
in the source tree. We try to maintain them,
|
||||
but lwIP's mainly focused build system is CMake.
|
||||
|
||||
MS Visual Studio
|
||||
================
|
||||
lwIP also provides basic support for MSVS in the win32 port
|
||||
folder under 'msvc'. We try to maintain these files,
|
||||
but lwIP's mainly focused build system is CMake.
|
||||
236
CHANGELOG
236
CHANGELOG
@@ -6,6 +6,148 @@ HISTORY
|
||||
|
||||
* [Enter new changes just after this line - do not remove this line]
|
||||
|
||||
(STABLE-2.2.0):
|
||||
|
||||
2018-10-02: Dirk Ziegelmeier
|
||||
* Integrate contrib repository into main lwIP repository
|
||||
|
||||
++ New features:
|
||||
|
||||
2022-04-05: David Cermak
|
||||
* contrib/addons: Add example of using DHCP extra options hooks
|
||||
|
||||
2023-05-11: David Cermak
|
||||
* dhcp: Add macro for appending extra client's request options
|
||||
|
||||
2023-05-11: xueyunfei
|
||||
* dhcp: Enable custom config for timeouts, thresholds, backoff time
|
||||
|
||||
2021-04-26
|
||||
* test/unit: added more unit tests
|
||||
|
||||
2020-03-27: Simon Goldschmidt
|
||||
* test/fuzz: improve fuzz test
|
||||
|
||||
2019-12-11: Simon Goldschmidt
|
||||
* ip6addr_aton: support scoped address strings (via '%')
|
||||
|
||||
2019-08-28: Joan Lledó
|
||||
* Contrib: Add kFreeBSD to the Unix port
|
||||
|
||||
2019-07-14: Joan Lledó
|
||||
* Unix port: improve support for the Hurd
|
||||
|
||||
++ Bugfixes:
|
||||
|
||||
2019-12-11: David Girault
|
||||
* altcp_tls: support for saving/restoring session information
|
||||
|
||||
2018-11-16: Craig McQUeen
|
||||
* dns: allow a DNS look-up with a trailing dot in the name
|
||||
|
||||
2018-10-19: Timmy Brolin
|
||||
* Add outgoing VLAN PCP support for Ethernet level QoS
|
||||
|
||||
2018-10-08: Ben Wijen
|
||||
* apps/tftp: added TFTP client
|
||||
|
||||
2018-10-04: Jasper Verschueren
|
||||
* Implement IPv4 ACD (Address Conflict Detection)
|
||||
|
||||
2023-05-10
|
||||
* altcp_tls_mbedtls: note which version of mbedtls we are compatible to
|
||||
* altcp_tls_mbedtls: multiple compatibility fixes
|
||||
|
||||
2023-04-26: Jan Breuer, Harrold Spier, Ognjen Bjelica, Dirk Ziegelmeier, Simon Goldschmidt
|
||||
* apps/snmp: multiple fixes and improvements to snmp
|
||||
|
||||
2022-01-12: Simon Goldschmidt
|
||||
* httpd: clean up custom file handling
|
||||
|
||||
2021-11-25: quanjia
|
||||
* ping: fix sockaddr len in ping_send() for PING_USE_SOCKETS==1
|
||||
|
||||
2021-11-12: Bas Prins
|
||||
* http_client: reset timeout when receiving data
|
||||
|
||||
2020-07-07: Erik Ekman
|
||||
* Rename IP and Ethernet equality checkers from _cmp to _eq
|
||||
|
||||
2020-03-05: Simon Goldschmidt
|
||||
* tcp: tighten up checks for received SYN
|
||||
|
||||
2020-01-30: Simon Goldschmidt, David Girault, David J. Fiddes, Tom Ferrin
|
||||
* apps/sntp: multiple fixes and improvements for sntp
|
||||
|
||||
2020-01-30: Simon Goldschmidt
|
||||
* ip_forward: fix IPv4 forwarding with multiple netifs/offloading
|
||||
|
||||
2019-06-11: David Girault, Giuseppe Modugno
|
||||
* apps/mqtt: multiple fixes for mqtt
|
||||
|
||||
2019-05-19: Joan Lledó
|
||||
* New function tcpip_callback_wait()
|
||||
Call a function inside the tcpip thread and block the calling thread until
|
||||
the callback finishes
|
||||
|
||||
2018-08-15: Jasper Verschueren, David Girault, Our Air Quality
|
||||
* apps/mdns: greatly improved the mdns client
|
||||
|
||||
(STABLE-2.1.2):
|
||||
|
||||
++ Bugfixes:
|
||||
|
||||
2018-11-21: Jens Nielsen
|
||||
* netbiosns.c: fix expecting too large packet (bug #55069)
|
||||
|
||||
2018-11-19: Dirk Ziegelmeier
|
||||
* smtp.c: fix compiling with strict C compatibility because of strnlen (bug #55034)
|
||||
|
||||
2018-11-12: Simon Goldschmidt
|
||||
* tcp.c: fix overflow check in tcp_recved triggering invalid assertion (bug #55015)
|
||||
|
||||
2018-11-12: Simon Goldschmidt
|
||||
* tcp.c: fix a bug in sending RST segments (sent from port 0)
|
||||
|
||||
(STABLE-2.1.1):
|
||||
|
||||
++ Bugfixes:
|
||||
|
||||
2018-11-01: Joan Lledó
|
||||
* sockets.c: fix bad assertion in lwip_poll_dec_sockets_used() (bug #54933)
|
||||
|
||||
2018-11-01: Dirk Ziegelmeier
|
||||
* ip4.c: don't send 127.* to default netif (bug #54670)
|
||||
|
||||
2018-10-23: David Girault
|
||||
* altcp_tls_mbedtls.c: fix use-after free (bug #54774)
|
||||
|
||||
2018-10-23: Ognjen Bjelica, Dirk Ziegelmeier
|
||||
* snmp_scalar.c: Avoid NULL pointer dereference (bug #54886)
|
||||
|
||||
2018-10-23: Simon Goldschmidt
|
||||
* Fix missing standard includes in multiple files
|
||||
|
||||
2018-10-17: Ivan Warren
|
||||
* def.h: fix casting htonX and ntohX to u16_t (bug #54850)
|
||||
|
||||
2018-10-12: Simon Goldschmidt
|
||||
* Revert "tcp_abandon: no need to buffer pcb->local_port" (fix that source port was 0 for RST
|
||||
called when aborting a connection)
|
||||
|
||||
2018-10-11: Jonas Rabenstein
|
||||
* tcp.c: tcp_recved: check for overflow and warn about too big values (patch #9699)
|
||||
|
||||
2018-10-06: Joan Lledó
|
||||
* sockets.c: alloc_socket(): Check for LWIP_SOCKET_POLL when setting select-
|
||||
related variables (patch #9696)
|
||||
|
||||
2018-10-04: Spencer
|
||||
* tcp.c: Update prev pointer when skipping entries in tcp_slowtmr (patch #9694)
|
||||
|
||||
2018-09-27: Martine Lenders
|
||||
* lowpan6.c: Fix IEEE 802.15.4 address setting (bug #54749)
|
||||
|
||||
(STABLE-2.1.0):
|
||||
|
||||
++ New features:
|
||||
@@ -122,7 +264,7 @@ HISTORY
|
||||
|
||||
2017-01-20: Joel Cunningham
|
||||
* sockets: add interface name/index APIs (task #14314)
|
||||
|
||||
|
||||
2017-01-08: David van Moolenbroek
|
||||
* Extensions to RAW API (patch #9208)
|
||||
- Connected RAW PCBs
|
||||
@@ -211,7 +353,7 @@ HISTORY
|
||||
|
||||
2017-08-02: Abroz Bizjak/Simon Goldschmidt
|
||||
* multiple fixes in IPv4 reassembly (leading to corrupted datagrams received)
|
||||
|
||||
|
||||
2017-03-30: Simon Goldschmidt
|
||||
* dhcp.c: return ERR_VAL instead of asserting on offset-out-of-pbuf
|
||||
|
||||
@@ -356,7 +498,7 @@ HISTORY
|
||||
|
||||
2016-11-14: Joel Cunningham
|
||||
* tcp_out.c: fixed bug #49533 (start persist timer when unsent seg can't fit
|
||||
in window)
|
||||
in window)
|
||||
|
||||
2016-11-16: Roberto Barbieri Carrera
|
||||
* autoip.c: fixed bug #49610 (sometimes AutoIP fails to reuse the same address)
|
||||
@@ -631,7 +773,7 @@ HISTORY
|
||||
implementation which is under a BSD-ish license.
|
||||
- Also switched to PolarSSL MD4,MD5,SHA1 implementations, which are meant to be
|
||||
used in embedded devices with reduced memory footprint.
|
||||
- Removed PPP configuration file parsing support.
|
||||
- Removed PPP configuration file parsing support.
|
||||
- Added macro definition EAP_SUPPORT to make EAP support optional.
|
||||
- Added macro definition CHAP_SUPPORT to make CHAP support optional.
|
||||
- Added macro definition MSCHAP_SUPPORT to make MSCHAP support optional.
|
||||
@@ -1163,7 +1305,7 @@ HISTORY
|
||||
2012-03-25: Simon Goldschmidt (idea by Mason)
|
||||
* posix/*: added posix-compatibility include files posix/netdb.h and posix/sys/socket.h
|
||||
which are a simple wrapper to the correct lwIP include files.
|
||||
|
||||
|
||||
2012-01-16: Simon Goldschmidt
|
||||
* opt.h, icmp.c: Added option CHECKSUM_GEN_ICMP
|
||||
|
||||
@@ -1245,10 +1387,10 @@ HISTORY
|
||||
|
||||
2012-03-22: Simon Goldschmidt
|
||||
* ip4.c: fixed bug #35927: missing refragmentaion in ip_forward
|
||||
|
||||
|
||||
2012-03-20: Simon Goldschmidt (patch by Mason)
|
||||
* netdb.c: fixed bug #35907: lwip_gethostbyname_r returns an invalid h_addr_list
|
||||
|
||||
|
||||
2012-03-12: Simon Goldschmidt (patch by Bostjan Meglic)
|
||||
* ppp.c: fixed bug #35809: PPP GetMask(): Compiler warning on big endian,
|
||||
possible bug on little endian system
|
||||
@@ -1703,7 +1845,7 @@ HISTORY
|
||||
2011-03-27: Simon Goldschmidt
|
||||
* sockets.c: Fixed bug #32906: lwip_connect+lwip_send did not work for udp and
|
||||
raw pcbs with LWIP_TCPIP_CORE_LOCKING==1.
|
||||
|
||||
|
||||
2011-03-27: Simon Goldschmidt
|
||||
* tcp_out.c: Fixed bug #32820 (Outgoing TCP connections created before route
|
||||
is present never times out) by starting retransmission timer before checking
|
||||
@@ -1756,7 +1898,7 @@ HISTORY
|
||||
2010-11-23: Simon Goldschmidt
|
||||
* tcp_in.c: Fixed bug #30577: tcp_input: don't discard ACK-only packets after
|
||||
refusing 'refused_data' again.
|
||||
|
||||
|
||||
2010-11-22: Simon Goldschmidt
|
||||
* sockets.c: Fixed bug #31590: getsockopt(... SO_ERROR ...) gives EINPROGRESS
|
||||
after a successful nonblocking connection.
|
||||
@@ -1801,21 +1943,21 @@ HISTORY
|
||||
2010-08-01: Simon Goldschmidt (patch by Greg Renda)
|
||||
* ppp.c: Applied patch #7264 (PPP protocols are rejected incorrectly on big
|
||||
endian architectures)
|
||||
|
||||
|
||||
2010-07-28: Simon Goldschmidt
|
||||
* api_lib.c, api_msg.c, sockets.c, mib2.c: Fixed compilation with TCP or UDP
|
||||
disabled.
|
||||
|
||||
|
||||
2010-07-27: Simon Goldschmidt
|
||||
* tcp.c: Fixed bug #30565 (tcp_connect() check bound list): that check did no
|
||||
harm but never did anything
|
||||
|
||||
|
||||
2010-07-21: Simon Goldschmidt
|
||||
* ip.c: Fixed invalid fix for bug #30402 (CHECKSUM_GEN_IP_INLINE does not
|
||||
add IP options)
|
||||
|
||||
2010-07-16: Kieran Mansley
|
||||
* msg_in.c: Fixed SNMP ASN constant defines to not use ! operator
|
||||
* msg_in.c: Fixed SNMP ASN constant defines to not use ! operator
|
||||
|
||||
2010-07-10: Simon Goldschmidt
|
||||
* ip.c: Fixed bug #30402: CHECKSUM_GEN_IP_INLINE does not add IP options
|
||||
@@ -1919,7 +2061,7 @@ HISTORY
|
||||
|
||||
2010-03-05: Simon Goldschmidt
|
||||
* api_msg.c: Correctly set TCP_WRITE_FLAG_MORE when netconn_write is split
|
||||
into multiple calls to tcp_write.
|
||||
into multiple calls to tcp_write.
|
||||
|
||||
2010-02-21: Simon Goldschmidt
|
||||
* opt.h, mem.h, dns.c: task #10140: Remove DNS_USES_STATIC_BUF (keep
|
||||
@@ -2379,7 +2521,7 @@ HISTORY
|
||||
sent to mbox
|
||||
|
||||
2009-06-25 Kieran Mansley
|
||||
* api_msg.c api.h: BUG26722: initialise netconn write variables
|
||||
* api_msg.c api.h: BUG26722: initialise netconn write variables
|
||||
in netconn_alloc
|
||||
|
||||
2009-06-25 Kieran Mansley
|
||||
@@ -2387,7 +2529,7 @@ HISTORY
|
||||
|
||||
2009-06-25 Kieran Mansley
|
||||
* tcp.c, tcp_in.c, tcp_out.c, tcp.h: BUG26301 and BUG26267: correct
|
||||
simultaneous close behaviour, and make snd_nxt have the same meaning
|
||||
simultaneous close behaviour, and make snd_nxt have the same meaning
|
||||
as in the RFCs.
|
||||
|
||||
2009-05-12 Simon Goldschmidt
|
||||
@@ -2523,7 +2665,7 @@ HISTORY
|
||||
* tcp.c, tcp_in.c, tcp.h: add tcp_abandon() to cope with dropping
|
||||
connections where no reset required (bug #25622)
|
||||
|
||||
* tcp_out.c: set TCP_ACK flag on keepalive and zero window probes
|
||||
* tcp_out.c: set TCP_ACK flag on keepalive and zero window probes
|
||||
(bug #20779)
|
||||
|
||||
2009-02-18 Simon Goldschmidt (Jonathan Larmour and Bill Auerbach)
|
||||
@@ -2559,7 +2701,7 @@ HISTORY
|
||||
out of pool pbufs.
|
||||
|
||||
2008-12-19 Simon Goldschmidt
|
||||
* many files: patch #6699: fixed some warnings on platform where sizeof(int) == 2
|
||||
* many files: patch #6699: fixed some warnings on platform where sizeof(int) == 2
|
||||
|
||||
2008-12-10 Tamas Somogyi, Frédéric Bernon
|
||||
* sockets.c: fixed bug #25051: lwip_recvfrom problem with udp: fromaddr and
|
||||
@@ -2644,7 +2786,7 @@ HISTORY
|
||||
made from lwipopts.h. Fix comment on how to override LWIP_CHKSUM.
|
||||
|
||||
2008-01-22 Frédéric Bernon
|
||||
* tcp.c, tcp_in.c, tcp.h, opt.h: Rename LWIP_CALCULATE_EFF_SEND_MSS in
|
||||
* tcp.c, tcp_in.c, tcp.h, opt.h: Rename LWIP_CALCULATE_EFF_SEND_MSS in
|
||||
TCP_CALCULATE_EFF_SEND_MSS to have coherent TCP options names.
|
||||
|
||||
2008-01-14 Frédéric Bernon
|
||||
@@ -2654,7 +2796,7 @@ HISTORY
|
||||
|
||||
2008-01-14 Frédéric Bernon, Marc Chaland
|
||||
* ip.c: Integrate patch #6369" ip_input : checking before realloc".
|
||||
|
||||
|
||||
2008-01-12 Frédéric Bernon
|
||||
* tcpip.h, tcpip.c, api.h, api_lib.c, api_msg.c, sockets.c: replace the field
|
||||
netconn::sem per netconn::op_completed like suggested for the task #7490
|
||||
@@ -2680,8 +2822,8 @@ HISTORY
|
||||
Introduce changes for task #7490 "Add return value to sys_mbox_post" with some
|
||||
modifications in the sys_mbox api: sys_mbox_new take a "size" parameters which
|
||||
indicate the number of pointers query by the mailbox. There is three defines
|
||||
in opt.h to indicate sizes for tcpip::mbox, netconn::recvmbox, and for the
|
||||
netconn::acceptmbox. Port maintainers, you can decide to just add this new
|
||||
in opt.h to indicate sizes for tcpip::mbox, netconn::recvmbox, and for the
|
||||
netconn::acceptmbox. Port maintainers, you can decide to just add this new
|
||||
parameter in your implementation, but to ignore it to keep the previous behavior.
|
||||
The new sys_mbox_trypost function return a value to know if the mailbox is
|
||||
full or if the message is posted. Take a look to sys_arch.txt for more details.
|
||||
@@ -2805,7 +2947,7 @@ HISTORY
|
||||
Note that previous "copy" parameter for "write" APIs is now called "apiflags".
|
||||
|
||||
2007-10-24 Frédéric Bernon
|
||||
* api.h, api_lib.c, api_msg.c: Add macro API_EVENT in the same spirit than
|
||||
* api.h, api_lib.c, api_msg.c: Add macro API_EVENT in the same spirit than
|
||||
TCP_EVENT_xxx macros to get a code more readable. It could also help to remove
|
||||
some code (like we have talk in "patch #5919 : Create compile switch to remove
|
||||
select code"), but it could be done later.
|
||||
@@ -2825,7 +2967,7 @@ HISTORY
|
||||
all netifs (or ports) can use it.
|
||||
|
||||
2007-10-05 Frédéric Bernon
|
||||
* netifapi.h, netifapi.c: add function netifapi_netif_set_default. Change the
|
||||
* netifapi.h, netifapi.c: add function netifapi_netif_set_default. Change the
|
||||
common function to reduce a little bit the footprint (for all functions using
|
||||
only the "netif" parameter).
|
||||
|
||||
@@ -2849,7 +2991,7 @@ HISTORY
|
||||
or snmp_add_sysuptime(), and to define the SNMP_GET_SYSUPTIME(sysuptime) macro.
|
||||
This one is undefined by default in mib2.c. SNMP_GET_SYSUPTIME is called inside
|
||||
snmp_get_sysuptime(u32_t *value), and enable to change "sysuptime" value only
|
||||
when it's queried (any direct call to "sysuptime" is changed by a call to
|
||||
when it's queried (any direct call to "sysuptime" is changed by a call to
|
||||
snmp_get_sysuptime).
|
||||
|
||||
2007-09-09 Frédéric Bernon, Bill Florac
|
||||
@@ -2930,7 +3072,7 @@ HISTORY
|
||||
2007-08-26 Marc Boucher
|
||||
* api_msg.c: do_close_internal(): Reset the callbacks and arg (conn) to NULL
|
||||
since they can under certain circumstances be called with an invalid conn
|
||||
pointer after the connection has been closed (and conn has been freed).
|
||||
pointer after the connection has been closed (and conn has been freed).
|
||||
|
||||
2007-08-25 Frédéric Bernon (Artem Migaev's Patch)
|
||||
* netif.h, netif.c: Integrate "patch #6163 : Function to check if link layer is up".
|
||||
@@ -2942,11 +3084,11 @@ HISTORY
|
||||
|
||||
2007-08-22 Frédéric Bernon
|
||||
* tcpip.h, tcpip.c, ethernetif.c, opt.h: remove options ETHARP_TCPIP_INPUT &
|
||||
ETHARP_TCPIP_ETHINPUT, now, only "ethinput" code is supported, even if the
|
||||
ETHARP_TCPIP_ETHINPUT, now, only "ethinput" code is supported, even if the
|
||||
name is tcpip_input (we keep the name of 1.2.0 function).
|
||||
|
||||
2007-08-17 Jared Grubb
|
||||
* memp_std.h, memp.h, memp.c, mem.c, stats.c: (Task #7136) Centralize mempool
|
||||
* memp_std.h, memp.h, memp.c, mem.c, stats.c: (Task #7136) Centralize mempool
|
||||
settings into new memp_std.h and optional user file lwippools.h. This adds
|
||||
more dynamic mempools, and allows the user to create an arbitrary number of
|
||||
mempools for mem_malloc.
|
||||
@@ -3153,32 +3295,32 @@ HISTORY
|
||||
snmp_set_sysname.
|
||||
|
||||
2007-03-28 Frédéric Bernon
|
||||
* netif.h, netif.c: A new NETIF_FLAG_ETHARP flag is defined in netif.h, to allow to
|
||||
* netif.h, netif.c: A new NETIF_FLAG_ETHARP flag is defined in netif.h, to allow to
|
||||
initialize a network interface's flag with. It tell this interface is an ethernet
|
||||
device, and we can use ARP with it to do a "gratuitous ARP" (RFC 3220 "IP Mobility
|
||||
Support for IPv4" section 4.6) when interface is "up" with netif_set_up().
|
||||
|
||||
2007-03-26 Frédéric Bernon, Jonathan Larmour
|
||||
* opt.h, tcpip.c: New configuration option LWIP_ARP allow to disable ARP init at build
|
||||
time if you only use PPP or SLIP. The default is enable. Note we don't have to call
|
||||
time if you only use PPP or SLIP. The default is enable. Note we don't have to call
|
||||
etharp_init in your port's initilization sequence if you use tcpip.c, because this call
|
||||
is done in tcpip_init function.
|
||||
|
||||
2007-03-22 Frédéric Bernon
|
||||
* stats.h, stats.c, msg_in.c: Stats counters can be change to u32_t if necessary with the
|
||||
new option LWIP_STATS_LARGE. If you need this option, define LWIP_STATS_LARGE to 1 in
|
||||
your lwipopts.h. More, unused counters are not defined in the stats structs, and not
|
||||
your lwipopts.h. More, unused counters are not defined in the stats structs, and not
|
||||
display by stats_display(). Note that some options (SYS_STATS and RAW_STATS) are defined
|
||||
but never used. Fix msg_in.c with the correct #if test for a stat display.
|
||||
|
||||
2007-03-21 Kieran Mansley
|
||||
* netif.c, netif.h: Apply patch#4197 with some changes (originator: rireland@hmgsl.com).
|
||||
* netif.c, netif.h: Apply patch#4197 with some changes (originator: rireland@hmgsl.com).
|
||||
Provides callback on netif up/down state change.
|
||||
|
||||
2007-03-11 Frédéric Bernon, Mace Gael, Steve Reynolds
|
||||
* sockets.h, sockets.c, api.h, api_lib.c, api_msg.h, api_msg.c, igmp.h, igmp.c,
|
||||
ip.c, netif.h, tcpip.c, opt.h:
|
||||
New configuration option LWIP_IGMP to enable IGMP processing. Based on only one
|
||||
New configuration option LWIP_IGMP to enable IGMP processing. Based on only one
|
||||
filter per all network interfaces. Declare a new function in netif to enable to
|
||||
control the MAC filter (to reduce lwIP traffic processing).
|
||||
|
||||
@@ -3201,7 +3343,7 @@ HISTORY
|
||||
* snmp_msg.h, msg_in.c: SNMP UDP ports can be configured at compile time.
|
||||
|
||||
2007-03-06 Frédéric Bernon
|
||||
* api.h, api_lib.c, sockets.h, sockets.c, tcpip.c, sys.h, sys.c, err.h:
|
||||
* api.h, api_lib.c, sockets.h, sockets.c, tcpip.c, sys.h, sys.c, err.h:
|
||||
Implement SO_RCVTIMEO on UDP sockets/netconn.
|
||||
|
||||
2007-02-28 Kieran Mansley (based on patch from Simon Goldschmidt)
|
||||
@@ -3243,7 +3385,7 @@ HISTORY
|
||||
and/or warnings on some systems where mem_size_t and size_t differ.
|
||||
* pbuf.c, ppp.c: Fix warnings on some systems with mem_malloc.
|
||||
|
||||
2008-03-04 Kieran Mansley (contributions by others)
|
||||
2008-03-04 Kieran Mansley (contributions by others)
|
||||
* Numerous small compiler error/warning fixes from contributions to
|
||||
mailing list after 1.3.0 release candidate made.
|
||||
|
||||
@@ -3360,7 +3502,7 @@ HISTORY
|
||||
type change. Any compiler should cause an error without any changes in
|
||||
yours netconn_peer calls (so, it can't be a "silent change"). It also
|
||||
reduce a little bit the footprint for socket layer (lwip_getpeername &
|
||||
lwip_getsockname use now a common lwip_getaddrname function since
|
||||
lwip_getsockname use now a common lwip_getaddrname function since
|
||||
netconn_peer & netconn_addr have the same parameters).
|
||||
|
||||
2007-09-20 Simon Goldschmidt
|
||||
@@ -3380,13 +3522,13 @@ HISTORY
|
||||
if they are not defined in cc.h, in the same spirit than "lwip/opt.h" for lwipopts.h.
|
||||
|
||||
2007-08-30 Frédéric Bernon
|
||||
* igmp.h, igmp.c: Some changes to remove some redundant code, add some traces,
|
||||
* igmp.h, igmp.c: Some changes to remove some redundant code, add some traces,
|
||||
and fix some coding style.
|
||||
|
||||
2007-08-28 Frédéric Bernon
|
||||
* tcpip.c: Fix TCPIP_MSG_INPKT processing: now, tcpip_input can be used for any
|
||||
kind of packets. These packets are considered like Ethernet packets (payload
|
||||
pointing to ethhdr) if the netif got the NETIF_FLAG_ETHARP flag. Else, packets
|
||||
kind of packets. These packets are considered like Ethernet packets (payload
|
||||
pointing to ethhdr) if the netif got the NETIF_FLAG_ETHARP flag. Else, packets
|
||||
are considered like IP packets (payload pointing to iphdr).
|
||||
|
||||
2007-08-27 Frédéric Bernon
|
||||
@@ -3484,7 +3626,7 @@ HISTORY
|
||||
2007-06-28 Frédéric Bernon
|
||||
* netifapi.h, netifapi.c, tcpip.h, tcpip.c: Update code to handle the option
|
||||
LWIP_TCPIP_CORE_LOCKING, and do some changes to be coherent with last modifications
|
||||
in api_lib/api_msg (use pointers and not type with table, etc...)
|
||||
in api_lib/api_msg (use pointers and not type with table, etc...)
|
||||
|
||||
2007-06-26 Simon Goldschmidt
|
||||
* udp.h: Fixed bug #20259: struct udp_hdr was lacking the packin defines.
|
||||
@@ -3586,7 +3728,7 @@ HISTORY
|
||||
|
||||
2007-05-16 Frédéric Bernon
|
||||
* tcpip.c, igmp.h, igmp.c: Fixed bug "#19800 : IGMP: igmp_tick() will not work
|
||||
with NO_SYS=1". Note that igmp_init is always in tcpip_thread (and not in
|
||||
with NO_SYS=1". Note that igmp_init is always in tcpip_thread (and not in
|
||||
tcpip_init) because we have to be sure that network interfaces are already
|
||||
added (mac filter is updated only in igmp_init for the moment).
|
||||
|
||||
@@ -3733,7 +3875,7 @@ HISTORY
|
||||
|
||||
2007-03-20 Frédéric Bernon
|
||||
* tcpip.c: Initialize tcpip's mbox, and verify if initialized in tcpip_input,
|
||||
tcpip_ethinput, tcpip_callback, tcpip_apimsg, to fix a init problem with
|
||||
tcpip_ethinput, tcpip_callback, tcpip_apimsg, to fix a init problem with
|
||||
network interfaces. Also fix a compiler warning.
|
||||
|
||||
2007-03-20 Kieran Mansley
|
||||
@@ -3825,13 +3967,13 @@ HISTORY
|
||||
* rawapi.txt: Fix documentation mismatch with etharp.h about etharp_tmr's call
|
||||
interval.
|
||||
|
||||
2007-02-28 Kieran Mansley
|
||||
2007-02-28 Kieran Mansley
|
||||
* pbuf.c: Fix BUG#17645 - ensure pbuf payload pointer is not moved
|
||||
outside the region of the pbuf by pbuf_header()
|
||||
|
||||
2007-02-28 Kieran Mansley
|
||||
2007-02-28 Kieran Mansley
|
||||
* sockets.c: Fix BUG#19161 - ensure milliseconds timeout is non-zero
|
||||
when supplied timeout is also non-zero
|
||||
when supplied timeout is also non-zero
|
||||
|
||||
(STABLE-1.2.0)
|
||||
|
||||
@@ -3915,7 +4057,7 @@ HISTORY
|
||||
in accept() by Kevin Lawson.
|
||||
|
||||
2006-05-26 Christiaan Simons
|
||||
* api_lib.c: Removed conn->sem creation and destruction
|
||||
* api_lib.c: Removed conn->sem creation and destruction
|
||||
from netconn_write() and added sys_sem_new to netconn_new_*.
|
||||
|
||||
(STABLE-1_1_1)
|
||||
@@ -3985,7 +4127,7 @@ HISTORY
|
||||
* dhcp.c: Decline messages were not multicast but unicast.
|
||||
* etharp.c: ETHARP_CREATE is renamed to ETHARP_TRY_HARD.
|
||||
Do not try hard to insert arbitrary packet's source address,
|
||||
etharp_ip_input() now calls etharp_update() without ETHARP_TRY_HARD.
|
||||
etharp_ip_input() now calls etharp_update() without ETHARP_TRY_HARD.
|
||||
etharp_query() now always DOES call ETHARP_TRY_HARD so that users
|
||||
querying an address will see it appear in the cache (DHCP could
|
||||
suffer from this when a server invalidly gave an in-use address.)
|
||||
|
||||
@@ -1,11 +1,23 @@
|
||||
cmake_minimum_required(VERSION 3.7)
|
||||
cmake_minimum_required(VERSION 3.10)
|
||||
|
||||
set (CMAKE_CONFIGURATION_TYPES "Debug;Release")
|
||||
|
||||
project(lwIP)
|
||||
|
||||
# Example lwIP application
|
||||
set(LWIP_DIR ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
include(src/Filelists.cmake)
|
||||
|
||||
# Package generation
|
||||
set (LWIP_DEFINITIONS LWIP_DEBUG=1)
|
||||
|
||||
if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
|
||||
add_subdirectory(${LWIP_DIR}/contrib/ports/win32/example_app)
|
||||
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Linux" OR ${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
|
||||
add_subdirectory(${LWIP_DIR}/contrib/ports/unix/example_app)
|
||||
else()
|
||||
message(WARNING "Host ${CMAKE_SYSTEM_NAME} is not supported to build example_app")
|
||||
endif()
|
||||
|
||||
# Source package generation
|
||||
set(CPACK_SOURCE_GENERATOR "ZIP")
|
||||
set(CPACK_SOURCE_PACKAGE_DESCRIPTION_SUMMARY "lwIP lightweight IP stack")
|
||||
set(CPACK_PACKAGE_VERSION_MAJOR "${LWIP_VERSION_MAJOR}")
|
||||
@@ -15,6 +27,9 @@ set(CPACK_SOURCE_IGNORE_FILES "/build/;${CPACK_SOURCE_IGNORE_FILES};.git")
|
||||
set(CPACK_SOURCE_PACKAGE_FILE_NAME "lwip-${LWIP_VERSION_MAJOR}.${LWIP_VERSION_MINOR}.${LWIP_VERSION_REVISION}")
|
||||
include(CPack)
|
||||
|
||||
# Target for package generation
|
||||
# Generate docs before creating source package
|
||||
include(src/Filelists.cmake)
|
||||
add_custom_target(dist COMMAND ${CMAKE_MAKE_PROGRAM} package_source)
|
||||
add_dependencies(dist lwipdocs)
|
||||
if (TARGET lwipdocs)
|
||||
add_dependencies(dist lwipdocs)
|
||||
endif()
|
||||
|
||||
54
COPYING
54
COPYING
@@ -1,33 +1,25 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2002 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Adam Dunkels <adam@sics.se>
|
||||
*
|
||||
*/
|
||||
Copyright (c) 2001, 2002 Swedish Institute of Computer Science.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
3. The name of the author may not be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
OF SUCH DAMAGE.
|
||||
|
||||
|
||||
2
FEATURES
2
FEATURES
@@ -4,7 +4,7 @@ The focus of the lwIP TCP/IP implementation is to reduce resource usage while st
|
||||
|
||||
Main features include:
|
||||
- Protocols: IP, IPv6, ICMP, ND, MLD, UDP, TCP, IGMP, ARP, PPPoS, PPPoE, 6LowPAN (via IEEE 802.15.4, BLE or ZEP; since v2.1.0)
|
||||
- DHCP client, stateless DHCPv6 (since v2.1.0), DNS client (incl. mDNS hostname resolver), AutoIP/APIPA (Zeroconf), SNMP agent (v1, v2c, v3 (since v2.1.0), private MIB support & MIB compiler)
|
||||
- DHCP client, stateless DHCPv6 (since v2.1.0), DNS client (incl. mDNS hostname resolver), AutoIP/APIPA (Zeroconf), ACD (Address Conflict Detection), SNMP agent (v1, v2c, v3 (since v2.1.0), private MIB support & MIB compiler)
|
||||
- APIs: specialized APIs for enhanced performance & zero copy, optional Berkeley-alike socket API
|
||||
- Extended features: IP forwarding over multiple network interfaces
|
||||
- Extended TCP features: congestion control, RTT estimation and fast recovery/fast retransmit, sending SACKs (since v2.1.0), "altcp": nearly transparent TLS for any tcp pcb (since v2.1.0)
|
||||
|
||||
1
FILES
1
FILES
@@ -1,3 +1,4 @@
|
||||
contrib/ - lwIP examples, ports, and small apps (formerly http://git.savannah.gnu.org/cgit/lwip/lwip-contrib.git/)
|
||||
src/ - The source code for the lwIP TCP/IP stack.
|
||||
doc/ - The documentation for lwIP.
|
||||
test/ - Some code to test whether the sources do what they should.
|
||||
|
||||
35
README
35
README
@@ -17,12 +17,13 @@ FEATURES
|
||||
multiple network interfaces
|
||||
* ICMP (Internet Control Message Protocol) for network maintenance and debugging
|
||||
* IGMP (Internet Group Management Protocol) for multicast traffic management
|
||||
* MLD (Multicast listener discovery for IPv6). Aims to be compliant with
|
||||
* MLD (Multicast listener discovery for IPv6). Aims to be compliant with
|
||||
RFC 2710. No support for MLDv2
|
||||
* ND (Neighbor discovery and stateless address autoconfiguration for IPv6).
|
||||
Aims to be compliant with RFC 4861 (Neighbor discovery) and RFC 4862
|
||||
(Address autoconfiguration)
|
||||
* DHCP, AutoIP/APIPA (Zeroconf) and (stateless) DHCPv6
|
||||
* DHCP, AutoIP/APIPA (Zeroconf), ACD (Address Conflict Detection)
|
||||
and (stateless) DHCPv6
|
||||
* UDP (User Datagram Protocol) including experimental UDP-lite extensions
|
||||
* TCP (Transmission Control Protocol) with congestion control, RTT estimation
|
||||
fast recovery/fast retransmit and sending SACKs
|
||||
@@ -63,37 +64,39 @@ help improve lwIP by use of Savannah's interface, Git and the
|
||||
mailing list. A core team of developers will commit changes to the
|
||||
Git source tree.
|
||||
|
||||
The lwIP TCP/IP stack is maintained in the 'lwip' Git module and
|
||||
contributions (such as platform ports) are in the 'contrib' Git module.
|
||||
The lwIP TCP/IP stack is maintained in the 'src' directory and
|
||||
contributions (such as platform ports and applications) are in
|
||||
the 'contrib' directory.
|
||||
|
||||
See doc/savannah.txt for details on Git server access for users and
|
||||
developers.
|
||||
|
||||
The current Git trees are web-browsable:
|
||||
http://git.savannah.gnu.org/cgit/lwip.git
|
||||
http://git.savannah.gnu.org/cgit/lwip/lwip-contrib.git
|
||||
The current Git tree is web-browsable:
|
||||
https://git.savannah.gnu.org/cgit/lwip.git
|
||||
|
||||
Submit patches and bugs via the lwIP project page:
|
||||
http://savannah.nongnu.org/projects/lwip/
|
||||
https://savannah.nongnu.org/projects/lwip/
|
||||
|
||||
Continuous integration builds (GCC, clang):
|
||||
https://travis-ci.org/yarrick/lwip-merged
|
||||
https://github.com/lwip-tcpip/lwip/actions
|
||||
|
||||
|
||||
DOCUMENTATION
|
||||
|
||||
Self documentation of the source code is regularly extracted from the current
|
||||
Git sources and is available from this web page:
|
||||
http://www.nongnu.org/lwip/
|
||||
|
||||
There is now a constantly growing wiki about lwIP at
|
||||
http://lwip.wikia.com/wiki/LwIP_Wiki
|
||||
https://www.nongnu.org/lwip/
|
||||
|
||||
Also, there are mailing lists you can subscribe at
|
||||
http://savannah.nongnu.org/mail/?group=lwip
|
||||
https://savannah.nongnu.org/mail/?group=lwip
|
||||
plus searchable archives:
|
||||
http://lists.nongnu.org/archive/html/lwip-users/
|
||||
http://lists.nongnu.org/archive/html/lwip-devel/
|
||||
https://lists.nongnu.org/archive/html/lwip-users/
|
||||
https://lists.nongnu.org/archive/html/lwip-devel/
|
||||
|
||||
There is a wiki about lwIP at
|
||||
https://lwip.wikia.com/wiki/LwIP_Wiki
|
||||
You might get questions answered there, but unfortunately, it is not as
|
||||
well maintained as it should be.
|
||||
|
||||
lwIP was originally written by Adam Dunkels:
|
||||
http://dunkels.com/adam/
|
||||
|
||||
10
UPGRADING
10
UPGRADING
@@ -7,6 +7,16 @@ with newer versions.
|
||||
(git master)
|
||||
|
||||
* [Enter new changes just after this line - do not remove this line]
|
||||
* The eth_addr_cmp and ip_addr_cmp set of functions have been renamed to eth_addr_eq, ip_addr_eq
|
||||
and so on, since they return non-zero on equality. Macros for the old names exist.
|
||||
* The sio_write function used by PPP now takes the data argument as const.
|
||||
|
||||
(2.2.0)
|
||||
|
||||
++ Repository changes:
|
||||
|
||||
* The contrib repository has been added into the main repository in the subdirectory 'contrib'
|
||||
(the old contrib repository remains online for reference but is not used any more)
|
||||
|
||||
(2.1.0)
|
||||
|
||||
|
||||
26
codespell_changed_files.sh
Normal file
26
codespell_changed_files.sh
Normal file
@@ -0,0 +1,26 @@
|
||||
# Copyright 2017 Kaspar Schleiser <kaspar@schleiser.de>
|
||||
# Copyright 2014 Ludwig Knüpfer <ludwig.knuepfer@fu-berlin.de>
|
||||
# Copyright 2014 Hinnerk van Bruinehsen <h.v.bruinehsen@fu-berlin.de>
|
||||
# Copyright 2020 Jonathan Demeyer <jona.dem@gmail.com>
|
||||
#
|
||||
# This file is subject to the terms and conditions of the GNU Lesser
|
||||
# General Public License v2.1. See the file LICENSE in the top level
|
||||
# directory for more details.
|
||||
|
||||
changed_files() {
|
||||
: ${FILEREGEX:='\.([CcHh])$'}
|
||||
: ${EXCLUDE:=''}
|
||||
: ${DIFFFILTER:='ACMR'}
|
||||
|
||||
DIFFFILTER="--diff-filter=${DIFFFILTER}"
|
||||
|
||||
# select either all or only touched-in-branch files, filter through FILEREGEX
|
||||
if [ -z "${BASE_BRANCH}" ]; then
|
||||
FILES="$(git ls-tree -r --full-tree --name-only HEAD | grep -E ${FILEREGEX})"
|
||||
else
|
||||
FILES="$(git diff ${DIFFFILTER} --name-only ${BASE_BRANCH} | grep -E ${FILEREGEX})"
|
||||
fi
|
||||
|
||||
# filter out negatives
|
||||
echo "${FILES}" | grep -v -E ${EXCLUDE}
|
||||
}
|
||||
57
codespell_check.sh
Executable file
57
codespell_check.sh
Executable file
@@ -0,0 +1,57 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright 2019 Alexandre Abadie <alexandre.abadie@inria.fr>
|
||||
#
|
||||
# This file is subject to the terms and conditions of the GNU Lesser
|
||||
# General Public License v2.1. See the file LICENSE in the top level
|
||||
# directory for more details.
|
||||
|
||||
CODESPELL_CMD="codespell"
|
||||
|
||||
if tput colors &> /dev/null && [ "$(tput colors)" -ge 8 ]; then
|
||||
CERROR=$'\033[1;31m'
|
||||
CRESET=$'\033[0m'
|
||||
else
|
||||
CERROR=
|
||||
CRESET=
|
||||
fi
|
||||
|
||||
: "${LWIPBASE:=$(cd $(dirname $0)/; pwd)}"
|
||||
cd $LWIPBASE
|
||||
|
||||
: "${LWIPTOOLS:=${LWIPBASE}}"
|
||||
. "${LWIPTOOLS}"/codespell_changed_files.sh
|
||||
|
||||
FILEREGEX='\.([CcHh]|sh|py|md|txt)$'
|
||||
EXCLUDE='^(./contrib/apps/LwipMibCompiler/Mibs)'
|
||||
FILES=$(FILEREGEX=${FILEREGEX} EXCLUDE=${EXCLUDE} changed_files)
|
||||
|
||||
if [ -z "${FILES}" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
${CODESPELL_CMD} --version &> /dev/null || {
|
||||
printf "%s%s: cannot execute \"%s\"!%s\n" "${CERROR}" "$0" "${CODESPELL_CMD}" "${CRESET}"
|
||||
exit 1
|
||||
}
|
||||
|
||||
CODESPELL_OPTS="-q 2" # Disable "WARNING: Binary file"
|
||||
CODESPELL_OPTS+=" --check-hidden"
|
||||
# Disable false positives "nd => and, 2nd", "ans => and", "tolen => token",
|
||||
# "ofo => of", "WAN => WANT", "mut => must, mutt, moot"
|
||||
CODESPELL_OPTS+=" --ignore-words-list=nd,ans,tolen,ofo,wan,mut "
|
||||
# propagate all options to codespell -> pass "-w" to this script to write changes
|
||||
CODESPELL_OPTS+="$@"
|
||||
|
||||
# Filter-out all false positive raising "disabled due to" messages.
|
||||
ERRORS=$(${CODESPELL_CMD} ${CODESPELL_OPTS} ${FILES} | grep -ve "disabled due to")
|
||||
|
||||
if [ -n "${ERRORS}" ]
|
||||
then
|
||||
printf "%sThere are typos in the following files:%s\n\n" "${CERROR}" "${CRESET}"
|
||||
printf "%s\n" "${ERRORS}"
|
||||
# TODO: return 1 when all typos are fixed
|
||||
exit 0
|
||||
else
|
||||
exit 0
|
||||
fi
|
||||
106
contrib/Coverity/coverity.c
Normal file
106
contrib/Coverity/coverity.c
Normal file
@@ -0,0 +1,106 @@
|
||||
typedef unsigned char err_t;
|
||||
typedef unsigned int u32_t;
|
||||
typedef unsigned short u16_t;
|
||||
typedef unsigned char u8_t;
|
||||
typedef void sys_sem_t;
|
||||
typedef void sys_mutex_t;
|
||||
typedef size_t mem_size_t;
|
||||
typedef size_t memp_t;
|
||||
struct pbuf;
|
||||
struct netif;
|
||||
|
||||
void* mem_malloc(mem_size_t size)
|
||||
{
|
||||
__coverity_alloc__(size);
|
||||
}
|
||||
void mem_free(void* mem)
|
||||
{
|
||||
__coverity_free__(mem);
|
||||
}
|
||||
|
||||
void* memp_malloc(memp_t type)
|
||||
{
|
||||
__coverity_alloc_nosize__();
|
||||
}
|
||||
void memp_free(memp_t type, void* mem)
|
||||
{
|
||||
__coverity_free__(mem);
|
||||
}
|
||||
|
||||
void sys_mutex_lock(sys_mutex_t* mutex)
|
||||
{
|
||||
__coverity_exclusive_lock_acquire__(mutex);
|
||||
}
|
||||
void sys_mutex_unlock(sys_mutex_t* mutex)
|
||||
{
|
||||
__coverity_exclusive_lock_release__(mutex);
|
||||
}
|
||||
|
||||
u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout)
|
||||
{
|
||||
__coverity_recursive_lock_acquire__(sem);
|
||||
}
|
||||
void sys_sem_signal(sys_sem_t *sem)
|
||||
{
|
||||
__coverity_recursive_lock_release__(sem);
|
||||
}
|
||||
|
||||
err_t ethernet_input(struct pbuf *p, struct netif *inp)
|
||||
{
|
||||
__coverity_tainted_string_sink_content__(p);
|
||||
}
|
||||
err_t tcpip_input(struct pbuf *p, struct netif *inp)
|
||||
{
|
||||
__coverity_tainted_string_sink_content__(p);
|
||||
}
|
||||
err_t ip_input(struct pbuf *p, struct netif *inp)
|
||||
{
|
||||
__coverity_tainted_string_sink_content__(p);
|
||||
}
|
||||
err_t ip4_input(struct pbuf *p, struct netif *inp)
|
||||
{
|
||||
__coverity_tainted_string_sink_content__(p);
|
||||
}
|
||||
err_t ip6_input(struct pbuf *p, struct netif *inp)
|
||||
{
|
||||
__coverity_tainted_string_sink_content__(p);
|
||||
}
|
||||
|
||||
err_t pbuf_take(struct pbuf *buf, const void *dataptr, u16_t len)
|
||||
{
|
||||
__coverity_tainted_string_argument__(buf);
|
||||
__coverity_tainted_data_argument__(buf);
|
||||
}
|
||||
err_t pbuf_take_at(struct pbuf *buf, const void *dataptr, u16_t len, u16_t offset)
|
||||
{
|
||||
__coverity_tainted_string_argument__(buf);
|
||||
__coverity_tainted_data_argument__(buf);
|
||||
}
|
||||
err_t pbuf_copy(struct pbuf *p_to, struct pbuf *p_from)
|
||||
{
|
||||
__coverity_tainted_data_transitive__(p_to, p_from);
|
||||
}
|
||||
u16_t pbuf_copy_partial(struct pbuf *p, void *dataptr, u16_t len, u16_t offset)
|
||||
{
|
||||
__coverity_tainted_string_argument__(dataptr);
|
||||
__coverity_tainted_data_argument__(dataptr);
|
||||
}
|
||||
u8_t pbuf_get_at(struct pbuf* p, u16_t offset)
|
||||
{
|
||||
__coverity_tainted_data_return__();
|
||||
}
|
||||
|
||||
void abort(void)
|
||||
{
|
||||
__coverity_panic__();
|
||||
}
|
||||
|
||||
int check_path(char* path, size_t size)
|
||||
{
|
||||
if (size) {
|
||||
__coverity_tainted_data_sanitize__(path);
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
61
contrib/Filelists.cmake
Normal file
61
contrib/Filelists.cmake
Normal file
@@ -0,0 +1,61 @@
|
||||
# This file is indended to be included in end-user CMakeLists.txt
|
||||
# include(/path/to/Filelists.cmake)
|
||||
# It assumes the variable LWIP_CONTRIB_DIR is defined pointing to the
|
||||
# root path of lwIP/contrib sources.
|
||||
#
|
||||
# This file is NOT designed (on purpose) to be used as cmake
|
||||
# subdir via add_subdirectory()
|
||||
# The intention is to provide greater flexibility to users to
|
||||
# create their own targets using the *_SRCS variables.
|
||||
|
||||
if(NOT ${CMAKE_VERSION} VERSION_LESS "3.10.0")
|
||||
include_guard(GLOBAL)
|
||||
endif()
|
||||
|
||||
set(lwipcontribexamples_SRCS
|
||||
${LWIP_CONTRIB_DIR}/examples/httpd/fs_example/fs_example.c
|
||||
${LWIP_CONTRIB_DIR}/examples/httpd/https_example/https_example.c
|
||||
${LWIP_CONTRIB_DIR}/examples/httpd/ssi_example/ssi_example.c
|
||||
${LWIP_CONTRIB_DIR}/examples/lwiperf/lwiperf_example.c
|
||||
${LWIP_CONTRIB_DIR}/examples/mdns/mdns_example.c
|
||||
${LWIP_CONTRIB_DIR}/examples/mqtt/mqtt_example.c
|
||||
${LWIP_CONTRIB_DIR}/examples/ppp/pppos_example.c
|
||||
${LWIP_CONTRIB_DIR}/examples/snmp/snmp_private_mib/lwip_prvmib.c
|
||||
${LWIP_CONTRIB_DIR}/examples/snmp/snmp_v3/snmpv3_dummy.c
|
||||
${LWIP_CONTRIB_DIR}/examples/snmp/snmp_example.c
|
||||
${LWIP_CONTRIB_DIR}/examples/sntp/sntp_example.c
|
||||
${LWIP_CONTRIB_DIR}/examples/tftp/tftp_example.c
|
||||
)
|
||||
add_library(lwipcontribexamples EXCLUDE_FROM_ALL ${lwipcontribexamples_SRCS})
|
||||
target_compile_options(lwipcontribexamples PRIVATE ${LWIP_COMPILER_FLAGS})
|
||||
target_compile_definitions(lwipcontribexamples PRIVATE ${LWIP_DEFINITIONS} ${LWIP_MBEDTLS_DEFINITIONS})
|
||||
target_include_directories(lwipcontribexamples PRIVATE ${LWIP_INCLUDE_DIRS} ${LWIP_MBEDTLS_INCLUDE_DIRS})
|
||||
|
||||
set(lwipcontribapps_SRCS
|
||||
${LWIP_CONTRIB_DIR}/apps/httpserver/httpserver-netconn.c
|
||||
${LWIP_CONTRIB_DIR}/apps/chargen/chargen.c
|
||||
${LWIP_CONTRIB_DIR}/apps/udpecho/udpecho.c
|
||||
${LWIP_CONTRIB_DIR}/apps/tcpecho/tcpecho.c
|
||||
${LWIP_CONTRIB_DIR}/apps/shell/shell.c
|
||||
${LWIP_CONTRIB_DIR}/apps/udpecho_raw/udpecho_raw.c
|
||||
${LWIP_CONTRIB_DIR}/apps/tcpecho_raw/tcpecho_raw.c
|
||||
${LWIP_CONTRIB_DIR}/apps/netio/netio.c
|
||||
${LWIP_CONTRIB_DIR}/apps/ping/ping.c
|
||||
${LWIP_CONTRIB_DIR}/apps/socket_examples/socket_examples.c
|
||||
${LWIP_CONTRIB_DIR}/apps/rtp/rtp.c
|
||||
)
|
||||
add_library(lwipcontribapps EXCLUDE_FROM_ALL ${lwipcontribapps_SRCS})
|
||||
target_compile_options(lwipcontribapps PRIVATE ${LWIP_COMPILER_FLAGS})
|
||||
target_compile_definitions(lwipcontribapps PRIVATE ${LWIP_DEFINITIONS} ${LWIP_MBEDTLS_DEFINITIONS})
|
||||
target_include_directories(lwipcontribapps PRIVATE ${LWIP_INCLUDE_DIRS} ${LWIP_MBEDTLS_INCLUDE_DIRS})
|
||||
|
||||
set(lwipcontribaddons_SRCS
|
||||
${LWIP_CONTRIB_DIR}/addons/tcp_isn/tcp_isn.c
|
||||
${LWIP_CONTRIB_DIR}/addons/ipv6_static_routing/ip6_route_table.c
|
||||
# ${LWIP_CONTRIB_DIR}/addons/netconn/external_resolve/dnssd.c
|
||||
# ${LWIP_CONTRIB_DIR}/addons/tcp_md5/tcp_md5.c
|
||||
)
|
||||
add_library(lwipcontribaddons EXCLUDE_FROM_ALL ${lwipcontribaddons_SRCS})
|
||||
target_compile_options(lwipcontribaddons PRIVATE ${LWIP_COMPILER_FLAGS})
|
||||
target_compile_definitions(lwipcontribaddons PRIVATE ${LWIP_DEFINITIONS} ${LWIP_MBEDTLS_DEFINITIONS})
|
||||
target_include_directories(lwipcontribaddons PRIVATE ${LWIP_INCLUDE_DIRS} ${LWIP_MBEDTLS_INCLUDE_DIRS})
|
||||
57
contrib/Filelists.mk
Normal file
57
contrib/Filelists.mk
Normal file
@@ -0,0 +1,57 @@
|
||||
#
|
||||
# Copyright (c) 2001, 2002 Swedish Institute of Computer Science.
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without modification,
|
||||
# are permitted provided that the following conditions are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions and the following disclaimer in the documentation
|
||||
# and/or other materials provided with the distribution.
|
||||
# 3. The name of the author may not be used to endorse or promote products
|
||||
# derived from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
# SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
# OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
# OF SUCH DAMAGE.
|
||||
#
|
||||
# This file is part of the lwIP TCP/IP stack.
|
||||
#
|
||||
# Author: Adam Dunkels <adam@sics.se>
|
||||
#
|
||||
|
||||
# CONTRIBAPPFILES: Contrib Applications.
|
||||
CONTRIBAPPFILES=$(CONTRIBDIR)/apps/httpserver/httpserver-netconn.c \
|
||||
$(CONTRIBDIR)/apps/chargen/chargen.c \
|
||||
$(CONTRIBDIR)/apps/udpecho/udpecho.c \
|
||||
$(CONTRIBDIR)/apps/tcpecho/tcpecho.c \
|
||||
$(CONTRIBDIR)/apps/shell/shell.c \
|
||||
$(CONTRIBDIR)/apps/udpecho_raw/udpecho_raw.c \
|
||||
$(CONTRIBDIR)/apps/tcpecho_raw/tcpecho_raw.c \
|
||||
$(CONTRIBDIR)/apps/netio/netio.c \
|
||||
$(CONTRIBDIR)/apps/ping/ping.c \
|
||||
$(CONTRIBDIR)/apps/socket_examples/socket_examples.c \
|
||||
$(CONTRIBDIR)/apps/rtp/rtp.c \
|
||||
$(CONTRIBDIR)/examples/httpd/fs_example/fs_example.c \
|
||||
$(CONTRIBDIR)/examples/httpd/https_example/https_example.c \
|
||||
$(CONTRIBDIR)/examples/httpd/ssi_example/ssi_example.c \
|
||||
$(CONTRIBDIR)/examples/lwiperf/lwiperf_example.c \
|
||||
$(CONTRIBDIR)/examples/mdns/mdns_example.c \
|
||||
$(CONTRIBDIR)/examples/mqtt/mqtt_example.c \
|
||||
$(CONTRIBDIR)/examples/ppp/pppos_example.c \
|
||||
$(CONTRIBDIR)/examples/snmp/snmp_private_mib/lwip_prvmib.c \
|
||||
$(CONTRIBDIR)/examples/snmp/snmp_v3/snmpv3_dummy.c \
|
||||
$(CONTRIBDIR)/examples/snmp/snmp_example.c \
|
||||
$(CONTRIBDIR)/examples/sntp/sntp_example.c \
|
||||
$(CONTRIBDIR)/examples/tftp/tftp_example.c \
|
||||
$(CONTRIBDIR)/addons/tcp_isn/tcp_isn.c \
|
||||
$(CONTRIBDIR)/addons/ipv6_static_routing/ip6_route_table.c
|
||||
5
contrib/addons/dhcp_extra_opts/README
Normal file
5
contrib/addons/dhcp_extra_opts/README
Normal file
@@ -0,0 +1,5 @@
|
||||
A simple example of using LWIP_HOOK_DHCP_PARSE/APPEND_OPTION hooks to implement:
|
||||
* DHCP_OPTION_MTU (option 26) to update the netif's MTU
|
||||
* DHCP_OPTION_CLIENT_ID (option 61) to advertize client's HW id of LWIP_IANA_HWTYPE_ETHERNET type
|
||||
|
||||
Please follow the instructions in dhcp_extra_opts.h to add the hooks, definitions in lwipopts.h and enabling the extra options.
|
||||
91
contrib/addons/dhcp_extra_opts/dhcp_extra_opts.c
Normal file
91
contrib/addons/dhcp_extra_opts/dhcp_extra_opts.c
Normal file
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
* Copyright (c) Espressif Systems (Shanghai) CO LTD
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
#include <string.h>
|
||||
|
||||
#include "lwip/prot/dhcp.h"
|
||||
#include "lwip/dhcp.h"
|
||||
#include "lwip/netif.h"
|
||||
#include "lwip/prot/iana.h"
|
||||
|
||||
|
||||
void dhcp_parse_extra_opts(struct dhcp *dhcp, uint8_t state, uint8_t option, uint8_t len, struct pbuf* p, uint16_t offset)
|
||||
{
|
||||
LWIP_UNUSED_ARG(dhcp);
|
||||
LWIP_UNUSED_ARG(state);
|
||||
LWIP_UNUSED_ARG(option);
|
||||
LWIP_UNUSED_ARG(len);
|
||||
LWIP_UNUSED_ARG(p);
|
||||
LWIP_UNUSED_ARG(offset);
|
||||
#if LWIP_DHCP_ENABLE_MTU_UPDATE
|
||||
if ((option == DHCP_OPTION_MTU) &&
|
||||
(state == DHCP_STATE_REBOOTING || state == DHCP_STATE_REBINDING ||
|
||||
state == DHCP_STATE_RENEWING || state == DHCP_STATE_REQUESTING)) {
|
||||
u32_t mtu = 0;
|
||||
struct netif *netif;
|
||||
LWIP_ERROR("dhcp_parse_extra_opts(): MTU option's len != 2", len == 2, return;);
|
||||
LWIP_ERROR("dhcp_parse_extra_opts(): extracting MTU option failed",
|
||||
pbuf_copy_partial(p, &mtu, 2, offset) == 2, return;);
|
||||
mtu = lwip_htons((u16_t)mtu);
|
||||
NETIF_FOREACH(netif) {
|
||||
/* find the netif related to this dhcp */
|
||||
if (dhcp == netif_dhcp_data(netif)) {
|
||||
if (mtu < netif->mtu) {
|
||||
netif->mtu = mtu;
|
||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_parse_extra_opts(): Negotiated netif MTU is %d\n", netif->mtu));
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
} /* DHCP_OPTION_MTU */
|
||||
#endif /* LWIP_DHCP_ENABLE_MTU_UPDATE */
|
||||
}
|
||||
|
||||
void dhcp_append_extra_opts(struct netif *netif, uint8_t state, struct dhcp_msg *msg_out, uint16_t *options_out_len)
|
||||
{
|
||||
LWIP_UNUSED_ARG(netif);
|
||||
LWIP_UNUSED_ARG(state);
|
||||
LWIP_UNUSED_ARG(msg_out);
|
||||
LWIP_UNUSED_ARG(options_out_len);
|
||||
#if LWIP_DHCP_ENABLE_CLIENT_ID
|
||||
if (state == DHCP_STATE_RENEWING || state == DHCP_STATE_REBINDING ||
|
||||
state == DHCP_STATE_REBOOTING || state == DHCP_STATE_OFF ||
|
||||
state == DHCP_STATE_REQUESTING || state == DHCP_STATE_BACKING_OFF || state == DHCP_STATE_SELECTING) {
|
||||
size_t i;
|
||||
u8_t *options = msg_out->options + *options_out_len;
|
||||
LWIP_ERROR("dhcp_append(client_id): options_out_len + 3 + netif->hwaddr_len <= DHCP_OPTIONS_LEN",
|
||||
*options_out_len + 3U + netif->hwaddr_len <= DHCP_OPTIONS_LEN, return;);
|
||||
*options_out_len = *options_out_len + netif->hwaddr_len + 3;
|
||||
*options++ = DHCP_OPTION_CLIENT_ID;
|
||||
*options++ = netif->hwaddr_len + 1; /* option size */
|
||||
*options++ = LWIP_IANA_HWTYPE_ETHERNET;
|
||||
for (i = 0; i < netif->hwaddr_len; i++) {
|
||||
*options++ = netif->hwaddr[i];
|
||||
}
|
||||
}
|
||||
#endif /* LWIP_DHCP_ENABLE_CLIENT_ID */
|
||||
}
|
||||
61
contrib/addons/dhcp_extra_opts/dhcp_extra_opts.h
Normal file
61
contrib/addons/dhcp_extra_opts/dhcp_extra_opts.h
Normal file
@@ -0,0 +1,61 @@
|
||||
/*
|
||||
* Copyright (c) Espressif Systems (Shanghai) CO LTD
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the copyright holder nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* To use these additional DHCP options, make sure this file is included in LWIP_HOOK_FILENAME
|
||||
* and define these hooks:
|
||||
*
|
||||
* #define LWIP_HOOK_DHCP_PARSE_OPTION(netif, dhcp, state, msg, msg_type, option, len, pbuf, offset) \
|
||||
* do { LWIP_UNUSED_ARG(msg); \
|
||||
* dhcp_parse_extra_opts(dhcp, state, option, len, pbuf, offset); \
|
||||
* } while(0)
|
||||
*
|
||||
* #define LWIP_HOOK_DHCP_APPEND_OPTIONS(netif, dhcp, state, msg, msg_type, options_len_ptr) \
|
||||
* dhcp_append_extra_opts(netif, state, msg, options_len_ptr);
|
||||
*
|
||||
* To enable (disable) these option, please set one or both of the below macros to 1 (0)
|
||||
* #define LWIP_DHCP_ENABLE_MTU_UPDATE 1
|
||||
* #define LWIP_DHCP_ENABLE_CLIENT_ID 1
|
||||
*/
|
||||
|
||||
#ifndef LWIP_HDR_CONTRIB_ADDONS_DHCP_OPTS_H
|
||||
#define LWIP_HDR_CONTRIB_ADDONS_DHCP_OPTS_H
|
||||
|
||||
/* Add standard integers so the header could be included before lwip */
|
||||
#include <stdint.h>
|
||||
|
||||
/* Forward declare lwip structs */
|
||||
struct dhcp;
|
||||
struct pbuf;
|
||||
struct dhcp;
|
||||
struct netif;
|
||||
struct dhcp_msg;
|
||||
|
||||
/* Internal hook functions */
|
||||
void dhcp_parse_extra_opts(struct dhcp *dhcp, uint8_t state, uint8_t option, uint8_t len, struct pbuf* p, uint16_t offset);
|
||||
void dhcp_append_extra_opts(struct netif *netif, uint8_t state, struct dhcp_msg *msg_out, uint16_t *options_out_len);
|
||||
|
||||
#endif /* LWIP_HDR_CONTRIB_ADDONS_DHCP_OPTS_H */
|
||||
43
contrib/addons/ipv6_static_routing/README
Normal file
43
contrib/addons/ipv6_static_routing/README
Normal file
@@ -0,0 +1,43 @@
|
||||
A simple routing table implementation for addition, deletion and lookup of IPv6 routes.
|
||||
|
||||
APIs are:
|
||||
1) s8_t ip6_add_route_entry(struct ip6_prefix *ip6_prefix,
|
||||
struct netif *netif,
|
||||
ip6_addr_t *gateway,
|
||||
s8_t *index);
|
||||
|
||||
2) err_t ip6_remove_route_entry(struct ip6_prefix *ip6_prefix);
|
||||
|
||||
3) s8_t ip6_find_route_entry(ip6_addr_t *ip6_dest_addr);
|
||||
|
||||
4) struct netif *ip6_static_route(ip6_addr_t *src, ip6_addr_t *dest);
|
||||
|
||||
5) ip6_addr_t *ip6_get_gateway(struct netif *netif, ip6_addr_t *dest);
|
||||
|
||||
6) struct ip6_route_entry *ip6_get_route_table(void);
|
||||
|
||||
For route lookup from the table, The LWIP_HOOK_IP6_ROUTE hook in ip6_route(..) of ip6.c
|
||||
could be assigned to the ip6_static_route() API of this implementation to return the
|
||||
appropriate netif.
|
||||
|
||||
-- The application can add routes using the API ip6_add_route_entry(..).
|
||||
This API adds the ip6 prefix route into the static route table while
|
||||
keeping all entries sorted in decreasing order of prefix length.
|
||||
Subsequently, a linear search down the list can be performed to retrieve a
|
||||
matching route entry for a Longest Prefix Match.
|
||||
The prefix length is expected to be at an 8-bit boundary. While this is
|
||||
a limitation, it would serve most practical purposes.
|
||||
|
||||
-- The application can remove routes using the API ip6_remove_route_entry(..).
|
||||
|
||||
-- The application can find a route entry for a specific address using the
|
||||
ip6_find_route_entry() function which returns the index of the found entry.
|
||||
This is used internally by the route lookup function ip6_static_route() API.
|
||||
|
||||
-- To fetch the gateway IPv6 address for a specific destination IPv6
|
||||
address and target netif, the application can call ip6_get_gateway(..).
|
||||
This API could be assigned to the LWIP_HOOK_ND6_GET_GW() if a gateway has
|
||||
been added as part of the ip6_add_route_entry().
|
||||
|
||||
-- To fetch a pointer to the head of the table, the application can call
|
||||
ip6_get_route_table().
|
||||
248
contrib/addons/ipv6_static_routing/ip6_route_table.c
Normal file
248
contrib/addons/ipv6_static_routing/ip6_route_table.c
Normal file
@@ -0,0 +1,248 @@
|
||||
/**
|
||||
* @file
|
||||
* IPv6 static route table.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2015 Nest Labs, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* Author: Pradip De <pradipd@google.com>
|
||||
*
|
||||
*
|
||||
* Please coordinate changes and requests with Pradip De
|
||||
* <pradipd@google.com>
|
||||
*/
|
||||
|
||||
#include "lwip/opt.h"
|
||||
|
||||
#if LWIP_IPV6 /* don't build if not configured for use in lwipopts.h */
|
||||
|
||||
#include "ip6_route_table.h"
|
||||
#include "lwip/def.h"
|
||||
#include "lwip/mem.h"
|
||||
#include "lwip/netif.h"
|
||||
#include "lwip/ip6.h"
|
||||
#include "lwip/ip6_addr.h"
|
||||
#include "lwip/nd6.h"
|
||||
#include "lwip/debug.h"
|
||||
#include "lwip/stats.h"
|
||||
|
||||
#include "string.h"
|
||||
|
||||
static struct ip6_route_entry static_route_table[LWIP_IPV6_NUM_ROUTE_ENTRIES];
|
||||
|
||||
/**
|
||||
* Add the ip6 prefix route and target netif into the static route table while
|
||||
* keeping all entries sorted in decreasing order of prefix length.
|
||||
* 1. Search from the last entry up to find the correct slot to insert while
|
||||
* moving entries one position down to create room.
|
||||
* 2. Insert into empty slot created.
|
||||
*
|
||||
* Subsequently, a linear search down the list can be performed to retrieve a
|
||||
* matching route entry for a Longest Prefix Match.
|
||||
*
|
||||
* @param ip6_prefix the route prefix entry to add.
|
||||
* @param netif pointer to target netif.
|
||||
* @param gateway the gateway address to use to send through. Has to be link local.
|
||||
* @param idx return value argument of index where route entry was added in table.
|
||||
* @return ERR_OK if addition was successful.
|
||||
* ERR_MEM if table is already full.
|
||||
* ERR_ARG if passed argument is bad or route already exists in table.
|
||||
*/
|
||||
err_t
|
||||
ip6_add_route_entry(const struct ip6_prefix *ip6_prefix, struct netif *netif, const ip6_addr_t *gateway, s8_t *idx)
|
||||
{
|
||||
s8_t i = -1;
|
||||
err_t retval = ERR_OK;
|
||||
|
||||
if (!ip6_prefix_valid(ip6_prefix->prefix_len) || (netif == NULL)) {
|
||||
retval = ERR_ARG;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
/* Check if an entry already exists with matching prefix; If so, replace it. */
|
||||
for (i = 0; i < LWIP_IPV6_NUM_ROUTE_ENTRIES; i++) {
|
||||
if ((ip6_prefix->prefix_len == static_route_table[i].prefix.prefix_len) &&
|
||||
memcmp(&ip6_prefix->addr, &static_route_table[i].prefix.addr,
|
||||
ip6_prefix->prefix_len / 8) == 0) {
|
||||
/* Prefix matches; replace the netif with the one being added. */
|
||||
goto insert;
|
||||
}
|
||||
}
|
||||
|
||||
/* Check if the table is full */
|
||||
if (static_route_table[LWIP_IPV6_NUM_ROUTE_ENTRIES - 1].netif != NULL) {
|
||||
retval = ERR_MEM;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
/* Shift all entries down the table until slot is found */
|
||||
for (i = LWIP_IPV6_NUM_ROUTE_ENTRIES - 1;
|
||||
i > 0 && (ip6_prefix->prefix_len > static_route_table[i - 1].prefix.prefix_len); i--) {
|
||||
SMEMCPY(&static_route_table[i], &static_route_table[i - 1], sizeof(struct ip6_route_entry));
|
||||
}
|
||||
|
||||
insert:
|
||||
/* Insert into the slot selected */
|
||||
SMEMCPY(&static_route_table[i].prefix, ip6_prefix, sizeof(struct ip6_prefix));
|
||||
static_route_table[i].netif = netif;
|
||||
|
||||
/* Add gateway to route table */
|
||||
static_route_table[i].gateway = gateway;
|
||||
|
||||
if (idx != NULL) {
|
||||
*idx = i;
|
||||
}
|
||||
|
||||
exit:
|
||||
return retval;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes the route entry from the static route table.
|
||||
*
|
||||
* @param ip6_prefix the route prefix entry to delete.
|
||||
*/
|
||||
void
|
||||
ip6_remove_route_entry(const struct ip6_prefix *ip6_prefix)
|
||||
{
|
||||
int i, pos = -1;
|
||||
|
||||
for (i = 0; i < LWIP_IPV6_NUM_ROUTE_ENTRIES; i++) {
|
||||
/* compare prefix to find position to delete */
|
||||
if (ip6_prefix->prefix_len == static_route_table[i].prefix.prefix_len &&
|
||||
memcmp(&ip6_prefix->addr, &static_route_table[i].prefix.addr,
|
||||
ip6_prefix->prefix_len / 8) == 0) {
|
||||
pos = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (pos >= 0) {
|
||||
/* Shift everything beyond pos one slot up */
|
||||
for (i = pos; i < LWIP_IPV6_NUM_ROUTE_ENTRIES - 1; i++) {
|
||||
SMEMCPY(&static_route_table[i], &static_route_table[i+1], sizeof(struct ip6_route_entry));
|
||||
if (static_route_table[i].netif == NULL) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* Zero the remaining entries */
|
||||
for (; i < LWIP_IPV6_NUM_ROUTE_ENTRIES; i++) {
|
||||
ip6_addr_set_zero((&static_route_table[i].prefix.addr));
|
||||
static_route_table[i].netif = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds the appropriate route entry in the static route table corresponding to the given
|
||||
* destination IPv6 address. Since the entries in the route table are kept sorted in decreasing
|
||||
* order of prefix length, a linear search down the list is performed to retrieve a matching
|
||||
* index.
|
||||
*
|
||||
* @param ip6_dest_addr the destination address to match
|
||||
* @return the idx of the found route entry; -1 if not found.
|
||||
*/
|
||||
s8_t
|
||||
ip6_find_route_entry(const ip6_addr_t *ip6_dest_addr)
|
||||
{
|
||||
s8_t i, idx = -1;
|
||||
|
||||
/* Search prefix in the sorted(decreasing order of prefix length) list */
|
||||
for(i = 0; i < LWIP_IPV6_NUM_ROUTE_ENTRIES; i++) {
|
||||
if (memcmp(ip6_dest_addr, &static_route_table[i].prefix.addr,
|
||||
static_route_table[i].prefix.prefix_len / 8) == 0) {
|
||||
idx = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return idx;
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds the appropriate network interface for a given IPv6 address from a routing table with
|
||||
* static IPv6 routes.
|
||||
*
|
||||
* @param src the source IPv6 address, if known
|
||||
* @param dest the destination IPv6 address for which to find the route
|
||||
* @return the netif on which to send to reach dest
|
||||
*/
|
||||
struct netif *
|
||||
ip6_static_route(const ip6_addr_t *src, const ip6_addr_t *dest)
|
||||
{
|
||||
int i;
|
||||
|
||||
LWIP_UNUSED_ARG(src);
|
||||
|
||||
/* Perform table lookup */
|
||||
i = ip6_find_route_entry(dest);
|
||||
|
||||
if (i >= 0) {
|
||||
return static_route_table[i].netif;
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds the gateway IP6 address for a given destination IPv6 address and target netif
|
||||
* from a routing table with static IPv6 routes.
|
||||
*
|
||||
* @param netif the netif used for sending
|
||||
* @param dest the destination IPv6 address
|
||||
* @return the ip6 address of the gateway to forward packet to
|
||||
*/
|
||||
const ip6_addr_t *
|
||||
ip6_get_gateway(struct netif *netif, const ip6_addr_t *dest)
|
||||
{
|
||||
const ip6_addr_t *ret_gw = NULL;
|
||||
const int i = ip6_find_route_entry(dest);
|
||||
|
||||
LWIP_UNUSED_ARG(netif);
|
||||
|
||||
if (i >= 0) {
|
||||
if (static_route_table[i].gateway != NULL) {
|
||||
ret_gw = static_route_table[i].gateway;
|
||||
}
|
||||
}
|
||||
|
||||
return ret_gw;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the top of the route table.
|
||||
* This should be used for debug printing only.
|
||||
*
|
||||
* @return the top of the route table.
|
||||
*/
|
||||
const struct ip6_route_entry *
|
||||
ip6_get_route_table(void)
|
||||
{
|
||||
return static_route_table;
|
||||
}
|
||||
|
||||
#endif /* LWIP_IPV6 */
|
||||
94
contrib/addons/ipv6_static_routing/ip6_route_table.h
Normal file
94
contrib/addons/ipv6_static_routing/ip6_route_table.h
Normal file
@@ -0,0 +1,94 @@
|
||||
/**
|
||||
* @file
|
||||
*
|
||||
* IPv6 static route table.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2015 Nest Labs, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* Author: Pradip De <pradipd@google.com>
|
||||
*
|
||||
*
|
||||
* Please coordinate changes and requests with Pradip De
|
||||
* <pradipd@google.com>
|
||||
*/
|
||||
|
||||
#ifndef __LWIP_IP6_ROUTE_TABLE_H__
|
||||
#define __LWIP_IP6_ROUTE_TABLE_H__
|
||||
|
||||
#include "lwip/opt.h"
|
||||
|
||||
#if LWIP_IPV6 /* don't build if not configured for use in lwipopts.h */
|
||||
|
||||
#include "lwip/ip6_addr.h"
|
||||
#include "lwip/err.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
struct netif;
|
||||
|
||||
/**
|
||||
* LWIP_IPV6_NUM_ROUTES: Number of IPV6 routes that can be kept in the static route table.
|
||||
*/
|
||||
#ifndef LWIP_IPV6_NUM_ROUTE_ENTRIES
|
||||
#define LWIP_IPV6_NUM_ROUTE_ENTRIES (8)
|
||||
#endif
|
||||
|
||||
#define IP6_MAX_PREFIX_LEN (128)
|
||||
#define IP6_PREFIX_ALLOWED_GRANULARITY (8)
|
||||
/* Prefix length cannot be greater than 128 bits and needs to be at a byte boundary */
|
||||
#define ip6_prefix_valid(prefix_len) (((prefix_len) <= IP6_MAX_PREFIX_LEN) && \
|
||||
(((prefix_len) % IP6_PREFIX_ALLOWED_GRANULARITY) == 0))
|
||||
|
||||
struct ip6_prefix {
|
||||
ip6_addr_t addr;
|
||||
u8_t prefix_len; /* prefix length in bits at byte boundaries */
|
||||
};
|
||||
|
||||
struct ip6_route_entry {
|
||||
struct ip6_prefix prefix;
|
||||
struct netif *netif;
|
||||
const ip6_addr_t *gateway;
|
||||
};
|
||||
|
||||
err_t ip6_add_route_entry(const struct ip6_prefix *ip6_prefix, struct netif *netif,
|
||||
const ip6_addr_t *gateway, s8_t *idx);
|
||||
void ip6_remove_route_entry(const struct ip6_prefix *ip6_prefix);
|
||||
s8_t ip6_find_route_entry(const ip6_addr_t *ip6_dest_addr);
|
||||
struct netif *ip6_static_route(const ip6_addr_t *src, const ip6_addr_t *dest);
|
||||
const ip6_addr_t *ip6_get_gateway(struct netif *netif, const ip6_addr_t *dest);
|
||||
const struct ip6_route_entry *ip6_get_route_table(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* LWIP_IPV6 */
|
||||
|
||||
#endif /* __LWIP_IP6_ROUTE_TABLE_H__ */
|
||||
164
contrib/addons/netconn/external_resolve/dnssd.c
Normal file
164
contrib/addons/netconn/external_resolve/dnssd.c
Normal file
@@ -0,0 +1,164 @@
|
||||
/**
|
||||
* @file
|
||||
* DNS-SD APIs used by LWIP_HOOK_NETCONN_EXTERNAL_RESOLVE
|
||||
*
|
||||
* This implementation assumes the DNS-SD API implementation (most likely provided by
|
||||
* mDNSResponder) is implemented in the same process space as LwIP and can directly
|
||||
* invoke the callback for DNSServiceGetAddrInfo. This is the typical deployment in
|
||||
* an embedded environment where as a traditional OS requires pumping the callback results
|
||||
* through an IPC mechanism (see DNSServiceRefSockFD/DNSServiceProcessResult)
|
||||
*
|
||||
* @defgroup dnssd DNS-SD
|
||||
* @ingroup dns
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2017 Joel Cunningham, Garmin International, Inc. <joel.cunningham@garmin.com>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Joel Cunningham <joel.cunningham@me.com>
|
||||
*
|
||||
*/
|
||||
#include "lwip/opt.h"
|
||||
|
||||
#include "lwip/err.h"
|
||||
#include "lwip/inet.h"
|
||||
#include "lwip/sockets.h"
|
||||
#include "lwip/sys.h"
|
||||
|
||||
#include "dnssd.h"
|
||||
|
||||
/* External headers */
|
||||
#include <string.h>
|
||||
#include <dns_sd.h>
|
||||
|
||||
/* This timeout should allow for multiple queries.
|
||||
mDNSResponder has the following query timeline:
|
||||
Query 1: time = 0s
|
||||
Query 2: time = 1s
|
||||
Query 3: time = 4s
|
||||
*/
|
||||
#define GETADDR_TIMEOUT_MS 5000
|
||||
#define LOCAL_DOMAIN ".local"
|
||||
|
||||
/* Only consume .local hosts */
|
||||
#ifndef CONSUME_LOCAL_ONLY
|
||||
#define CONSUME_LOCAL_ONLY 1
|
||||
#endif
|
||||
|
||||
struct addr_clbk_msg {
|
||||
sys_sem_t sem;
|
||||
struct sockaddr_storage addr;
|
||||
err_t err;
|
||||
};
|
||||
|
||||
static void addr_info_callback(DNSServiceRef ref, DNSServiceFlags flags, u32_t interface_index,
|
||||
DNSServiceErrorType error_code, char const* hostname,
|
||||
const struct sockaddr* address, u32_t ttl, void* context);
|
||||
|
||||
int
|
||||
lwip_dnssd_gethostbyname(const char *name, ip_addr_t *addr, u8_t addrtype, err_t *err)
|
||||
{
|
||||
DNSServiceErrorType result;
|
||||
DNSServiceRef ref;
|
||||
struct addr_clbk_msg msg;
|
||||
char *p;
|
||||
|
||||
/* @todo: use with IPv6 */
|
||||
LWIP_UNUSED_ARG(addrtype);
|
||||
|
||||
#if CONSUME_LOCAL_ONLY
|
||||
/* check if this is a .local host. If it is, then we consume the query */
|
||||
p = strstr(name, LOCAL_DOMAIN);
|
||||
if (p == NULL) {
|
||||
return 0; /* not consumed */
|
||||
}
|
||||
p += (sizeof(LOCAL_DOMAIN) - 1);
|
||||
/* check to make sure .local isn't a substring (only allow .local\0 or .local.\0) */
|
||||
if ((*p != '.' && *p != '\0') ||
|
||||
(*p == '.' && *(p + 1) != '\0')) {
|
||||
return 0; /* not consumed */
|
||||
}
|
||||
#endif /* CONSUME_LOCAL_ONLY */
|
||||
|
||||
msg.err = sys_sem_new(&msg.sem, 0);
|
||||
if (msg.err != ERR_OK) {
|
||||
goto query_done;
|
||||
}
|
||||
|
||||
msg.err = ERR_TIMEOUT;
|
||||
result = DNSServiceGetAddrInfo(&ref, 0, 0, kDNSServiceProtocol_IPv4, name, addr_info_callback, &msg);
|
||||
if (result == kDNSServiceErr_NoError) {
|
||||
sys_arch_sem_wait(&msg.sem, GETADDR_TIMEOUT_MS);
|
||||
DNSServiceRefDeallocate(ref);
|
||||
|
||||
/* We got a response */
|
||||
if (msg.err == ERR_OK) {
|
||||
struct sockaddr_in* addr_in = (struct sockaddr_in *)&msg.addr;
|
||||
if (addr_in->sin_family == AF_INET) {
|
||||
inet_addr_to_ip4addr(ip_2_ip4(addr), &addr_in->sin_addr);
|
||||
} else {
|
||||
/* @todo add IPv6 support */
|
||||
msg.err = ERR_VAL;
|
||||
}
|
||||
}
|
||||
}
|
||||
sys_sem_free(&msg.sem);
|
||||
|
||||
/* Query has been consumed and is finished */
|
||||
query_done:
|
||||
*err = msg.err;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
addr_info_callback(DNSServiceRef ref, DNSServiceFlags flags, u32_t interface_index,
|
||||
DNSServiceErrorType error_code, char const* hostname,
|
||||
const struct sockaddr* address, u32_t ttl, void* context)
|
||||
{
|
||||
struct addr_clbk_msg* msg = (struct addr_clbk_msg*)context;
|
||||
struct sockaddr_in* addr_in = (struct sockaddr_in *)address;
|
||||
|
||||
LWIP_UNUSED_ARG(ref);
|
||||
LWIP_UNUSED_ARG(flags);
|
||||
LWIP_UNUSED_ARG(interface_index);
|
||||
LWIP_UNUSED_ARG(hostname);
|
||||
LWIP_UNUSED_ARG(ttl);
|
||||
LWIP_UNUSED_ARG(context);
|
||||
|
||||
if ((error_code == kDNSServiceErr_NoError) &&
|
||||
(addr_in->sin_family == AF_INET)) {
|
||||
MEMCPY(&msg->addr, addr_in, sizeof(*addr_in));
|
||||
msg->err = ERR_OK;
|
||||
}
|
||||
else {
|
||||
/* @todo add IPv6 support */
|
||||
msg->err = ERR_VAL;
|
||||
}
|
||||
|
||||
sys_sem_signal(&msg->sem);
|
||||
} /* addr_info_callback() */
|
||||
50
contrib/addons/netconn/external_resolve/dnssd.h
Normal file
50
contrib/addons/netconn/external_resolve/dnssd.h
Normal file
@@ -0,0 +1,50 @@
|
||||
/**
|
||||
* @file
|
||||
* DNS-SD APIs used by LWIP_HOOK_NETCONN_EXTERNAL_RESOLVE
|
||||
*
|
||||
* @defgroup dnssd DNS-SD
|
||||
* @ingroup dns
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2017 Joel Cunningham, Garmin International, Inc. <joel.cunningham@garmin.com>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Joel Cunningham <joel.cunningham@me.com>
|
||||
*
|
||||
*/
|
||||
#include "lwip/opt.h"
|
||||
|
||||
#ifndef LWIP_HDR_DNSSD_H
|
||||
#define LWIP_HDR_DNSSD_H
|
||||
|
||||
#include "lwip/err.h"
|
||||
#include "lwip/ip_addr.h"
|
||||
|
||||
int lwip_dnssd_gethostbyname(const char *name, ip_addr_t *addr, u8_t addrtype, err_t *err);
|
||||
|
||||
#endif /* LWIP_HDR_DNSSD_H */
|
||||
182
contrib/addons/tcp_isn/tcp_isn.c
Normal file
182
contrib/addons/tcp_isn/tcp_isn.c
Normal file
@@ -0,0 +1,182 @@
|
||||
/**
|
||||
* @file
|
||||
*
|
||||
* Reference implementation of the TCP ISN algorithm standardized in RFC 6528.
|
||||
* Produce TCP Initial Sequence Numbers by combining an MD5-generated hash
|
||||
* based on the new TCP connection's identity and a stable secret, with the
|
||||
* current time at 4-microsecond granularity.
|
||||
*
|
||||
* Specifically, the implementation uses MD5 to compute a hash of the input
|
||||
* buffer, which contains both the four-tuple of the new TCP connection (local
|
||||
* and remote IP address and port), as well as a 16-byte secret to make the
|
||||
* results unpredictable to external parties. The secret must be given at
|
||||
* initialization time and should ideally remain the same across system
|
||||
* reboots. To be sure: the spoofing-resistance of the resulting ISN depends
|
||||
* mainly on the strength of the supplied secret!
|
||||
*
|
||||
* The implementation takes 32 bits from the computed hash, and adds to it the
|
||||
* current time, in 4-microsecond units. The current time is computed from a
|
||||
* boot time given at initialization, and the current uptime as provided by
|
||||
* sys_now(). Thus, it assumes that sys_now() returns a time value that is
|
||||
* relative to the boot time, i.e., that it starts at 0 at system boot, and
|
||||
* only ever increases monotonically.
|
||||
*
|
||||
* For efficiency reasons, a single MD5 input buffer is used, and partially
|
||||
* filled in at initialization time. Specifically, of this 64-byte buffer, the
|
||||
* first 36 bytes are used for the four-way TCP tuple data, followed by the
|
||||
* 16-byte secret, followed by 12-byte zero padding. The 64-byte size of the
|
||||
* buffer should achieve the best performance for the actual MD5 computation.
|
||||
*
|
||||
* Basic usage:
|
||||
*
|
||||
* 1. in your lwipopts.h, add the following lines:
|
||||
*
|
||||
* #include <lwip/arch.h>
|
||||
* struct ip_addr;
|
||||
* u32_t lwip_hook_tcp_isn(const struct ip_addr *local_ip, u16_t local_port,
|
||||
* const struct ip_addr *remote_ip, u16_t remote_port);
|
||||
* "#define LWIP_HOOK_TCP_ISN lwip_hook_tcp_isn";
|
||||
*
|
||||
* 2. from your own code, call lwip_init_tcp_isn() at initialization time, with
|
||||
* appropriate parameters.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2016 The MINIX 3 Project.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* Author: David van Moolenbroek <david@minix3.org>
|
||||
*/
|
||||
|
||||
#include "tcp_isn.h"
|
||||
#include "lwip/ip_addr.h"
|
||||
#include "lwip/sys.h"
|
||||
#include <string.h>
|
||||
|
||||
#ifdef LWIP_HOOK_TCP_ISN
|
||||
|
||||
/* pull in md5 of ppp? */
|
||||
#include "netif/ppp/ppp_opts.h"
|
||||
#if !PPP_SUPPORT || (!LWIP_USE_EXTERNAL_POLARSSL && !LWIP_USE_EXTERNAL_MBEDTLS)
|
||||
#undef LWIP_INCLUDED_POLARSSL_MD5
|
||||
#define LWIP_INCLUDED_POLARSSL_MD5 1
|
||||
#include "netif/ppp/polarssl/md5.h"
|
||||
#endif
|
||||
|
||||
static u8_t input[64];
|
||||
static u32_t base_time;
|
||||
|
||||
/**
|
||||
* Initialize the TCP ISN module, with the boot time and a secret.
|
||||
*
|
||||
* @param boot_time Wall clock boot time of the system, in seconds.
|
||||
* @param secret_16_bytes A 16-byte secret used to randomize the TCP ISNs.
|
||||
*/
|
||||
void
|
||||
lwip_init_tcp_isn(u32_t boot_time, const u8_t *secret_16_bytes)
|
||||
{
|
||||
/* Initialize the input buffer with the secret and trailing zeroes. */
|
||||
memset(input, 0, sizeof(input));
|
||||
|
||||
MEMCPY(&input[36], secret_16_bytes, 16);
|
||||
|
||||
/* Save the boot time in 4-us units. Overflow is no problem here. */
|
||||
base_time = boot_time * 250000;
|
||||
}
|
||||
|
||||
/**
|
||||
* Hook to generate an Initial Sequence Number (ISN) for a new TCP connection.
|
||||
*
|
||||
* @param local_ip The local IP address.
|
||||
* @param local_port The local port number, in host-byte order.
|
||||
* @param remote_ip The remote IP address.
|
||||
* @param remote_port The remote port number, in host-byte order.
|
||||
* @return The ISN to use for the new TCP connection.
|
||||
*/
|
||||
u32_t
|
||||
lwip_hook_tcp_isn(const ip_addr_t *local_ip, u16_t local_port,
|
||||
const ip_addr_t *remote_ip, u16_t remote_port)
|
||||
{
|
||||
md5_context ctx;
|
||||
u8_t output[16];
|
||||
u32_t isn;
|
||||
|
||||
#if LWIP_IPV4 && LWIP_IPV6
|
||||
if (IP_IS_V6(local_ip))
|
||||
#endif /* LWIP_IPV4 && LWIP_IPV6 */
|
||||
#if LWIP_IPV6
|
||||
{
|
||||
const ip6_addr_t *local_ip6, *remote_ip6;
|
||||
|
||||
local_ip6 = ip_2_ip6(local_ip);
|
||||
remote_ip6 = ip_2_ip6(remote_ip);
|
||||
|
||||
SMEMCPY(&input[0], &local_ip6->addr, 16);
|
||||
SMEMCPY(&input[16], &remote_ip6->addr, 16);
|
||||
}
|
||||
#endif /* LWIP_IPV6 */
|
||||
#if LWIP_IPV4 && LWIP_IPV6
|
||||
else
|
||||
#endif /* LWIP_IPV4 && LWIP_IPV6 */
|
||||
#if LWIP_IPV4
|
||||
{
|
||||
const ip4_addr_t *local_ip4, *remote_ip4;
|
||||
|
||||
local_ip4 = ip_2_ip4(local_ip);
|
||||
remote_ip4 = ip_2_ip4(remote_ip);
|
||||
|
||||
/* Represent IPv4 addresses as IPv4-mapped IPv6 addresses, to ensure that
|
||||
* the IPv4 and IPv6 address spaces are completely disjoint. */
|
||||
memset(&input[0], 0, 10);
|
||||
input[10] = 0xff;
|
||||
input[11] = 0xff;
|
||||
SMEMCPY(&input[12], &local_ip4->addr, 4);
|
||||
memset(&input[16], 0, 10);
|
||||
input[26] = 0xff;
|
||||
input[27] = 0xff;
|
||||
SMEMCPY(&input[28], &remote_ip4->addr, 4);
|
||||
}
|
||||
#endif /* LWIP_IPV4 */
|
||||
|
||||
input[32] = (u8_t)(local_port >> 8);
|
||||
input[33] = (u8_t)(local_port & 0xff);
|
||||
input[34] = (u8_t)(remote_port >> 8);
|
||||
input[35] = (u8_t)(remote_port & 0xff);
|
||||
|
||||
/* The secret and padding are already filled in. */
|
||||
|
||||
/* Generate the hash, using MD5. */
|
||||
md5_starts(&ctx);
|
||||
md5_update(&ctx, input, sizeof(input));
|
||||
md5_finish(&ctx, output);
|
||||
|
||||
/* Arbitrarily take the first 32 bits from the generated hash. */
|
||||
MEMCPY(&isn, output, sizeof(isn));
|
||||
|
||||
/* Add the current time in 4-microsecond units. */
|
||||
return isn + base_time + sys_now() * 250;
|
||||
}
|
||||
|
||||
#endif /* LWIP_HOOK_TCP_ISN */
|
||||
48
contrib/addons/tcp_isn/tcp_isn.h
Normal file
48
contrib/addons/tcp_isn/tcp_isn.h
Normal file
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Copyright (c) 2016 The MINIX 3 Project.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* Author: David van Moolenbroek <david@minix3.org>
|
||||
*/
|
||||
|
||||
#ifndef LWIP_HDR_CONTRIB_ADDONS_TCP_ISN_H
|
||||
#define LWIP_HDR_CONTRIB_ADDONS_TCP_ISN_H
|
||||
|
||||
#include "lwip/opt.h"
|
||||
#include "lwip/ip_addr.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void lwip_init_tcp_isn(u32_t boot_time, const u8_t *secret_16_bytes);
|
||||
u32_t lwip_hook_tcp_isn(const ip_addr_t *local_ip, u16_t local_port,
|
||||
const ip_addr_t *remote_ip, u16_t remote_port);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* LWIP_HDR_CONTRIB_ADDONS_TCP_ISN_H */
|
||||
27
contrib/addons/tcp_md5/README
Normal file
27
contrib/addons/tcp_md5/README
Normal file
@@ -0,0 +1,27 @@
|
||||
This folder provides an example implementation of how to add custom tcp header
|
||||
options and custom socket options.
|
||||
|
||||
It does this by implementing the (seldom used) tcp md5 signature.
|
||||
|
||||
To enable it, add an LWIP_HOOK_FILENAME hook file, include tcp_md5.h in it and
|
||||
define these hooks:
|
||||
|
||||
#define LWIP_HOOK_TCP_INPACKET_PCB(pcb, hdr, optlen, opt1len, opt2, p) tcp_md5_check_inpacket(pcb, hdr, optlen, opt1len, opt2, p)
|
||||
#define LWIP_HOOK_TCP_OPT_LENGTH_SEGMENT(pcb, internal_len) tcp_md5_get_additional_option_length(pcb, internal_len)
|
||||
#define LWIP_HOOK_TCP_ADD_TX_OPTIONS(p, hdr, pcb, opts) tcp_md5_add_tx_options(p, hdr, pcb, opts)
|
||||
#define LWIP_HOOK_SOCKETS_SETSOCKOPT(s, sock, level, optname, optval, optlen, err) tcp_md5_setsockopt_hook(sock, level, optname, optval, optlen, err)
|
||||
|
||||
Then, in your sockets application, enable md5 signature on a socket like this:
|
||||
|
||||
struct tcp_md5sig md5;
|
||||
struct sockaddr_storage addr_remote; /* Initialize this to remote address and port */
|
||||
memcpy(&md5.tcpm_addr, &addr_remote, sizeof(addr_remote));
|
||||
strcpy(md5.tcpm_key, key); /* this is the md5 key per connection */
|
||||
md5.tcpm_keylen = strlen(key);
|
||||
if ((ret = setsockopt(sockfd, IPPROTO_TCP, TCP_MD5SIG, &md5, sizeof(md5))) < 0) {
|
||||
perror("setsockopt TCP_MD5SIG");
|
||||
return;
|
||||
}
|
||||
|
||||
After that, your connection (client) or all incoming connections (server) require
|
||||
tcp md5 signatures.
|
||||
534
contrib/addons/tcp_md5/tcp_md5.c
Normal file
534
contrib/addons/tcp_md5/tcp_md5.c
Normal file
@@ -0,0 +1,534 @@
|
||||
/**
|
||||
* @file: An implementation of TCP MD5 signatures by using various hooks in
|
||||
* lwIP to implement custom tcp options and custom socket options.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2018 Simon Goldschmidt
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* Author: Simon Goldschmidt <goldsimon@gmx.de>
|
||||
*/
|
||||
|
||||
#include "tcp_md5.h"
|
||||
#include "lwip/ip_addr.h"
|
||||
#include "lwip/sys.h"
|
||||
#include "lwip/prot/tcp.h"
|
||||
#include "lwip/priv/tcp_priv.h"
|
||||
#include "lwip/sockets.h"
|
||||
#include "lwip/priv/sockets_priv.h"
|
||||
#include "lwip/api.h"
|
||||
#include <string.h>
|
||||
|
||||
/* pull in md5 of ppp? */
|
||||
#include "netif/ppp/ppp_opts.h"
|
||||
#if !PPP_SUPPORT || (!LWIP_USE_EXTERNAL_POLARSSL && !LWIP_USE_EXTERNAL_MBEDTLS)
|
||||
#undef LWIP_INCLUDED_POLARSSL_MD5
|
||||
#define LWIP_INCLUDED_POLARSSL_MD5 1
|
||||
#include "netif/ppp/polarssl/md5.h"
|
||||
#endif
|
||||
|
||||
#if !LWIP_TCP_PCB_NUM_EXT_ARGS
|
||||
#error tcp_md5 needs LWIP_TCP_PCB_NUM_EXT_ARGS
|
||||
#endif
|
||||
|
||||
#define LWIP_TCP_OPT_MD5 19 /* number of the md5 option */
|
||||
#define LWIP_TCP_OPT_LEN_MD5 18 /* length of the md5 option */
|
||||
#define LWIP_TCP_OPT_LEN_MD5_OUT 20 /* 18 + alignment */
|
||||
|
||||
#define LWIP_TCP_MD5_DIGEST_LEN 16
|
||||
|
||||
/* This keeps the md5 state internally */
|
||||
struct tcp_md5_conn_info {
|
||||
struct tcp_md5_conn_info *next;
|
||||
ip_addr_t remote_addr;
|
||||
u16_t remote_port;
|
||||
u8_t key[TCP_MD5SIG_MAXKEYLEN];
|
||||
u16_t key_len;
|
||||
};
|
||||
|
||||
/* Callback function prototypes: */
|
||||
static void tcp_md5_extarg_destroy(u8_t id, void *data);
|
||||
static err_t tcp_md5_extarg_passive_open(u8_t id, struct tcp_pcb_listen *lpcb, struct tcp_pcb *cpcb);
|
||||
/* Define our tcp ext arg callback structure: */
|
||||
const struct tcp_ext_arg_callbacks tcp_md5_ext_arg_callbacks = {
|
||||
tcp_md5_extarg_destroy,
|
||||
tcp_md5_extarg_passive_open
|
||||
};
|
||||
|
||||
static u8_t tcp_md5_extarg_id = LWIP_TCP_PCB_NUM_EXT_ARG_ID_INVALID;
|
||||
static u8_t tcp_md5_opts_buf[40];
|
||||
|
||||
/** Initialize this module (allocates a tcp ext arg id) */
|
||||
void
|
||||
tcp_md5_init(void)
|
||||
{
|
||||
tcp_md5_extarg_id = tcp_ext_arg_alloc_id();
|
||||
}
|
||||
|
||||
/* Create a conn-info structure that holds the md5 state per connection */
|
||||
static struct tcp_md5_conn_info *
|
||||
tcp_md5_conn_info_alloc(void)
|
||||
{
|
||||
return (struct tcp_md5_conn_info *)mem_malloc(sizeof(struct tcp_md5_conn_info));
|
||||
}
|
||||
|
||||
/* Frees a conn-info structure that holds the md5 state per connection */
|
||||
static void
|
||||
tcp_md5_conn_info_free(struct tcp_md5_conn_info *info)
|
||||
{
|
||||
mem_free(info);
|
||||
}
|
||||
|
||||
/* A pcb is about to be destroyed. Free its extdata */
|
||||
static void
|
||||
tcp_md5_extarg_destroy(u8_t id, void *data)
|
||||
{
|
||||
struct tcp_md5_conn_info *iter;
|
||||
|
||||
LWIP_ASSERT("tcp_md5_extarg_id != LWIP_TCP_PCB_NUM_EXT_ARG_ID_INVALID",
|
||||
tcp_md5_extarg_id != LWIP_TCP_PCB_NUM_EXT_ARG_ID_INVALID);
|
||||
LWIP_ASSERT("id == tcp_md5_extarg_id", id == tcp_md5_extarg_id);
|
||||
LWIP_UNUSED_ARG(id);
|
||||
|
||||
iter = (struct tcp_md5_conn_info *)data;
|
||||
while (iter != NULL) {
|
||||
struct tcp_md5_conn_info *info = iter;
|
||||
iter = iter->next;
|
||||
tcp_md5_conn_info_free(info);
|
||||
}
|
||||
}
|
||||
|
||||
/* Try to find an md5 connection info for the specified remote connection */
|
||||
static struct tcp_md5_conn_info *
|
||||
tcp_md5_get_info(const struct tcp_pcb *pcb, const ip_addr_t *remote_ip, u16_t remote_port)
|
||||
{
|
||||
if (pcb != NULL) {
|
||||
struct tcp_md5_conn_info *info = (struct tcp_md5_conn_info *)tcp_ext_arg_get(pcb, tcp_md5_extarg_id);
|
||||
while (info != NULL) {
|
||||
if (ip_addr_eq(&info->remote_addr, remote_ip)) {
|
||||
if (info->remote_port == remote_port) {
|
||||
return info;
|
||||
}
|
||||
}
|
||||
info = info->next;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Passive open: copy md5 connection info from listen pcb to connection pcb
|
||||
* or return error (connection will be closed)
|
||||
*/
|
||||
static err_t
|
||||
tcp_md5_extarg_passive_open(u8_t id, struct tcp_pcb_listen *lpcb, struct tcp_pcb *cpcb)
|
||||
{
|
||||
struct tcp_md5_conn_info *iter;
|
||||
|
||||
LWIP_ASSERT("lpcb != NULL", lpcb != NULL);
|
||||
LWIP_ASSERT("cpcb != NULL", cpcb != NULL);
|
||||
LWIP_ASSERT("tcp_md5_extarg_id != LWIP_TCP_PCB_NUM_EXT_ARG_ID_INVALID",
|
||||
tcp_md5_extarg_id != LWIP_TCP_PCB_NUM_EXT_ARG_ID_INVALID);
|
||||
LWIP_ASSERT("id == tcp_md5_extarg_id", id == tcp_md5_extarg_id);
|
||||
LWIP_UNUSED_ARG(id);
|
||||
|
||||
iter = (struct tcp_md5_conn_info *)tcp_ext_arg_get((struct tcp_pcb *)lpcb, id);
|
||||
while (iter != NULL) {
|
||||
if (iter->remote_port == cpcb->remote_port) {
|
||||
if (ip_addr_eq(&iter->remote_addr, &cpcb->remote_ip)) {
|
||||
struct tcp_md5_conn_info *info = tcp_md5_conn_info_alloc();
|
||||
if (info != NULL) {
|
||||
memcpy(info, iter, sizeof(struct tcp_md5_conn_info));
|
||||
tcp_ext_arg_set(cpcb, id, info);
|
||||
tcp_ext_arg_set_callbacks(cpcb, id, &tcp_md5_ext_arg_callbacks);
|
||||
return ERR_OK;
|
||||
} else {
|
||||
return ERR_MEM;
|
||||
}
|
||||
}
|
||||
}
|
||||
iter = iter->next;
|
||||
}
|
||||
/* remote connection not found */
|
||||
return ERR_VAL;
|
||||
}
|
||||
|
||||
/* Parse tcp header options and return 1 if an md5 signature option was found */
|
||||
static int
|
||||
tcp_md5_parseopt(const u8_t *opts, u16_t optlen, u8_t *md5_digest_out)
|
||||
{
|
||||
u8_t data;
|
||||
u16_t optidx;
|
||||
|
||||
/* Parse the TCP MSS option, if present. */
|
||||
if (optlen != 0) {
|
||||
for (optidx = 0; optidx < optlen; ) {
|
||||
u8_t opt = opts[optidx++];
|
||||
switch (opt) {
|
||||
case LWIP_TCP_OPT_EOL:
|
||||
/* End of options. */
|
||||
LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: EOL\n"));
|
||||
return 0;
|
||||
case LWIP_TCP_OPT_NOP:
|
||||
/* NOP option. */
|
||||
LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: NOP\n"));
|
||||
break;
|
||||
case LWIP_TCP_OPT_MD5:
|
||||
LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: MD5\n"));
|
||||
if (opts[optidx++] != LWIP_TCP_OPT_LEN_MD5 || (optidx - 2 + LWIP_TCP_OPT_LEN_MD5) > optlen) {
|
||||
/* Bad length */
|
||||
LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: bad length\n"));
|
||||
return 0;
|
||||
}
|
||||
/* An MD5 option with the right option length. */
|
||||
memcpy(md5_digest_out, &opts[optidx], LWIP_TCP_MD5_DIGEST_LEN);
|
||||
/* no need to process the options further */
|
||||
return 1;
|
||||
break;
|
||||
default:
|
||||
LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: other\n"));
|
||||
data = opts[optidx++];
|
||||
if (data < 2) {
|
||||
LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: bad length\n"));
|
||||
/* If the length field is zero, the options are malformed
|
||||
and we don't process them further. */
|
||||
return 0;
|
||||
}
|
||||
/* All other options have a length field, so that we easily
|
||||
can skip past them. */
|
||||
optidx += data - 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Get tcp options into contiguous memory. May be required if input pbufs
|
||||
* are chained.
|
||||
*/
|
||||
static const u8_t*
|
||||
tcp_md5_options_singlebuf(struct tcp_hdr *hdr, u16_t optlen, u16_t opt1len, u8_t *opt2)
|
||||
{
|
||||
const u8_t *opts;
|
||||
LWIP_ASSERT("hdr != NULL", hdr != NULL);
|
||||
LWIP_ASSERT("optlen >= opt1len", optlen >= opt1len);
|
||||
opts = (const u8_t *)hdr + TCP_HLEN;
|
||||
if (optlen == opt1len) {
|
||||
/* arleady in one piece */
|
||||
return opts;
|
||||
}
|
||||
if (optlen > sizeof(tcp_md5_opts_buf)) {
|
||||
/* options too long */
|
||||
return NULL;
|
||||
}
|
||||
LWIP_ASSERT("opt2 != NULL", opt2 != NULL);
|
||||
/* copy first part */
|
||||
memcpy(tcp_md5_opts_buf, opts, opt1len);
|
||||
/* copy second part */
|
||||
memcpy(&tcp_md5_opts_buf[opt1len], opt2, optlen - opt1len);
|
||||
return tcp_md5_opts_buf;
|
||||
}
|
||||
|
||||
/* Create the md5 digest for a given segment */
|
||||
static int
|
||||
tcp_md5_create_digest(const ip_addr_t *ip_src, const ip_addr_t *ip_dst, const struct tcp_hdr *hdr,
|
||||
const u8_t *key, size_t key_len, u8_t *digest_out, struct pbuf *p)
|
||||
{
|
||||
md5_context ctx;
|
||||
u8_t tmp8;
|
||||
u16_t tmp16;
|
||||
const size_t addr_len = IP_ADDR_RAW_SIZE(*ip_src);
|
||||
|
||||
if (p != NULL) {
|
||||
LWIP_ASSERT("pbuf must not point to tcp header here!", (const void *)hdr != p->payload);
|
||||
}
|
||||
|
||||
/* Generate the hash, using MD5. */
|
||||
md5_starts(&ctx);
|
||||
/* 1. the TCP pseudo-header (in the order: source IP address,
|
||||
destination IP address, zero-padded protocol number, and
|
||||
segment length) */
|
||||
md5_update(&ctx, (const unsigned char*)ip_src, addr_len);
|
||||
md5_update(&ctx, (const unsigned char*)ip_dst, addr_len);
|
||||
tmp8 = 0; /* zero-padded */
|
||||
md5_update(&ctx, &tmp8, 1);
|
||||
tmp8 = IP_PROTO_TCP;
|
||||
md5_update(&ctx, &tmp8, 1);
|
||||
tmp16 = lwip_htons(TCPH_HDRLEN_BYTES(hdr) + (p ? p->tot_len : 0));
|
||||
md5_update(&ctx, (const unsigned char*)&tmp16, 2);
|
||||
/* 2. the TCP header, excluding options, and assuming a checksum of
|
||||
zero */
|
||||
md5_update(&ctx, (const unsigned char*)hdr, sizeof(struct tcp_hdr));
|
||||
/* 3. the TCP segment data (if any) */
|
||||
if ((p != NULL) && (p->tot_len != 0)) {
|
||||
struct pbuf *q;
|
||||
for (q = p; q != NULL; q = q->next) {
|
||||
md5_update(&ctx, (const unsigned char*)q->payload, q->len);
|
||||
}
|
||||
}
|
||||
/* 4. an independently-specified key or password, known to both TCPs
|
||||
and presumably connection-specific */
|
||||
md5_update(&ctx, key, key_len);
|
||||
|
||||
md5_finish(&ctx, digest_out);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Duplicate a tcp header and make sure the fields are in network byte order */
|
||||
static void
|
||||
tcp_md5_dup_tcphdr(struct tcp_hdr *tcphdr_copy, const struct tcp_hdr *tcphdr_in, int tcphdr_in_is_host_order)
|
||||
{
|
||||
memcpy(tcphdr_copy, tcphdr_in, sizeof(struct tcp_hdr));
|
||||
tcphdr_copy->chksum = 0; /* checksum is zero for the pseudo header */
|
||||
if (tcphdr_in_is_host_order) {
|
||||
/* lwIP writes the TCP header values back to the buffer, we need to invert that here: */
|
||||
tcphdr_copy->src = lwip_htons(tcphdr_copy->src);
|
||||
tcphdr_copy->dest = lwip_htons(tcphdr_copy->dest);
|
||||
tcphdr_copy->seqno = lwip_htonl(tcphdr_copy->seqno);
|
||||
tcphdr_copy->ackno = lwip_htonl(tcphdr_copy->ackno);
|
||||
tcphdr_copy->wnd = lwip_htons(tcphdr_copy->wnd);
|
||||
tcphdr_copy->urgp = lwip_htons(tcphdr_copy->urgp);
|
||||
}
|
||||
}
|
||||
|
||||
/* Check if md5 is enabled on a given pcb */
|
||||
static int
|
||||
tcp_md5_is_enabled_on_pcb(const struct tcp_pcb *pcb)
|
||||
{
|
||||
if (tcp_md5_extarg_id != LWIP_TCP_PCB_NUM_EXT_ARG_ID_INVALID) {
|
||||
struct tcp_md5_conn_info *info = (struct tcp_md5_conn_info *)tcp_ext_arg_get(pcb, tcp_md5_extarg_id);
|
||||
if (info != NULL) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Check if md5 is enabled on a given listen pcb */
|
||||
static int
|
||||
tcp_md5_is_enabled_on_lpcb(const struct tcp_pcb_listen *lpcb)
|
||||
{
|
||||
/* same as for connection pcbs */
|
||||
return tcp_md5_is_enabled_on_pcb((const struct tcp_pcb *)lpcb);
|
||||
}
|
||||
|
||||
/* Hook implementation for LWIP_HOOK_TCP_OPT_LENGTH_SEGMENT */
|
||||
u8_t
|
||||
tcp_md5_get_additional_option_length(const struct tcp_pcb *pcb, u8_t internal_option_length)
|
||||
{
|
||||
if ((pcb != NULL) && tcp_md5_is_enabled_on_pcb(pcb)) {
|
||||
u8_t new_option_length = internal_option_length + LWIP_TCP_OPT_LEN_MD5_OUT;
|
||||
LWIP_ASSERT("overflow", new_option_length > internal_option_length);
|
||||
LWIP_ASSERT("options too long", new_option_length <= TCP_MAX_OPTION_BYTES);
|
||||
return new_option_length;
|
||||
}
|
||||
return internal_option_length;
|
||||
}
|
||||
|
||||
/* Hook implementation for LWIP_HOOK_TCP_INPACKET_PCB when called for listen pcbs */
|
||||
static err_t
|
||||
tcp_md5_check_listen(struct tcp_pcb_listen* lpcb, struct tcp_hdr *hdr, u16_t optlen, u16_t opt1len, u8_t *opt2)
|
||||
{
|
||||
LWIP_ASSERT("lpcb != NULL", lpcb != NULL);
|
||||
|
||||
if (tcp_md5_is_enabled_on_lpcb(lpcb)) {
|
||||
const u8_t *opts;
|
||||
u8_t digest_received[LWIP_TCP_MD5_DIGEST_LEN];
|
||||
u8_t digest_calculated[LWIP_TCP_MD5_DIGEST_LEN];
|
||||
const struct tcp_md5_conn_info *info = tcp_md5_get_info((struct tcp_pcb *)lpcb, ip_current_src_addr(), hdr->src);
|
||||
if (info != NULL) {
|
||||
opts = tcp_md5_options_singlebuf(hdr, optlen, opt1len, opt2);
|
||||
if (opts != NULL) {
|
||||
if (tcp_md5_parseopt(opts, optlen, digest_received)) {
|
||||
struct tcp_hdr tcphdr_copy;
|
||||
tcp_md5_dup_tcphdr(&tcphdr_copy, hdr, 1);
|
||||
if (tcp_md5_create_digest(ip_current_src_addr(), ip_current_dest_addr(), &tcphdr_copy, info->key, info->key_len, digest_calculated, NULL)) {
|
||||
/* everything set up, compare the digests */
|
||||
if (!memcmp(digest_received, digest_calculated, LWIP_TCP_MD5_DIGEST_LEN)) {
|
||||
/* equal */
|
||||
return ERR_OK;
|
||||
}
|
||||
/* not equal */
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/* md5 enabled on this pcb but no match or other error -> fail */
|
||||
return ERR_VAL;
|
||||
}
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
/* Hook implementation for LWIP_HOOK_TCP_INPACKET_PCB */
|
||||
err_t
|
||||
tcp_md5_check_inpacket(struct tcp_pcb* pcb, struct tcp_hdr *hdr, u16_t optlen, u16_t opt1len, u8_t *opt2, struct pbuf *p)
|
||||
{
|
||||
LWIP_ASSERT("pcb != NULL", pcb != NULL);
|
||||
|
||||
if (pcb->state == LISTEN) {
|
||||
return tcp_md5_check_listen((struct tcp_pcb_listen *)pcb, hdr, optlen, opt1len, opt2);
|
||||
}
|
||||
|
||||
if (tcp_md5_is_enabled_on_pcb(pcb)) {
|
||||
const struct tcp_md5_conn_info *info = tcp_md5_get_info(pcb, ip_current_src_addr(), hdr->src);
|
||||
if (info != NULL) {
|
||||
const u8_t *opts;
|
||||
u8_t digest_received[LWIP_TCP_MD5_DIGEST_LEN];
|
||||
u8_t digest_calculated[LWIP_TCP_MD5_DIGEST_LEN];
|
||||
opts = tcp_md5_options_singlebuf(hdr, optlen, opt1len, opt2);
|
||||
if (opts != NULL) {
|
||||
if (tcp_md5_parseopt(opts, optlen, digest_received)) {
|
||||
struct tcp_hdr hdr_copy;
|
||||
tcp_md5_dup_tcphdr(&hdr_copy, hdr, 1);
|
||||
if (tcp_md5_create_digest(&pcb->remote_ip, &pcb->local_ip, &hdr_copy, info->key, info->key_len, digest_calculated, p)) {
|
||||
/* everything set up, compare the digests */
|
||||
if (!memcmp(digest_received, digest_calculated, LWIP_TCP_MD5_DIGEST_LEN)) {
|
||||
/* equal */
|
||||
return ERR_OK;
|
||||
}
|
||||
/* not equal */
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/* md5 enabled on this pcb but no match or other error -> fail */
|
||||
return ERR_VAL;
|
||||
}
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
/* Hook implementation for LWIP_HOOK_TCP_ADD_TX_OPTIONS */
|
||||
u32_t *
|
||||
tcp_md5_add_tx_options(struct pbuf *p, struct tcp_hdr *hdr, const struct tcp_pcb *pcb, u32_t *opts)
|
||||
{
|
||||
LWIP_ASSERT("p != NULL", p != NULL);
|
||||
LWIP_ASSERT("hdr != NULL", hdr != NULL);
|
||||
LWIP_ASSERT("pcb != NULL", pcb != NULL);
|
||||
LWIP_ASSERT("opts != NULL", opts != NULL);
|
||||
|
||||
if (tcp_md5_is_enabled_on_pcb(pcb)) {
|
||||
u8_t digest_calculated[LWIP_TCP_MD5_DIGEST_LEN];
|
||||
u32_t *opts_ret = opts + 5; /* we use 20 bytes: 2 bytes padding + 18 bytes for this option */
|
||||
u8_t *ptr = (u8_t*)opts;
|
||||
|
||||
const struct tcp_md5_conn_info *info = tcp_md5_get_info(pcb, &pcb->remote_ip, pcb->remote_port);
|
||||
if (info != NULL) {
|
||||
struct tcp_hdr hdr_copy;
|
||||
size_t hdrsize = TCPH_HDRLEN_BYTES(hdr);
|
||||
tcp_md5_dup_tcphdr(&hdr_copy, hdr, 0);
|
||||
/* p->payload points to the tcp header */
|
||||
LWIP_ASSERT("p->payload == hdr", p->payload == hdr);
|
||||
if (!pbuf_remove_header(p, hdrsize)) {
|
||||
u8_t ret;
|
||||
if (!tcp_md5_create_digest(&pcb->local_ip, &pcb->remote_ip, &hdr_copy, info->key, info->key_len, digest_calculated, p)) {
|
||||
info = NULL;
|
||||
}
|
||||
ret = pbuf_add_header_force(p, hdrsize);
|
||||
LWIP_ASSERT("tcp_md5_add_tx_options: pbuf_add_header_force failed", !ret);
|
||||
LWIP_UNUSED_ARG(ret);
|
||||
} else {
|
||||
LWIP_ASSERT("error", 0);
|
||||
}
|
||||
}
|
||||
if (info == NULL) {
|
||||
/* create an invalid signature by zeroing the digest */
|
||||
memset(&digest_calculated, 0, sizeof(digest_calculated));
|
||||
}
|
||||
|
||||
*ptr++ = LWIP_TCP_OPT_NOP;
|
||||
*ptr++ = LWIP_TCP_OPT_NOP;
|
||||
*ptr++ = LWIP_TCP_OPT_MD5;
|
||||
*ptr++ = LWIP_TCP_OPT_LEN_MD5;
|
||||
memcpy(ptr, digest_calculated, LWIP_TCP_MD5_DIGEST_LEN);
|
||||
ptr += LWIP_TCP_MD5_DIGEST_LEN;
|
||||
LWIP_ASSERT("ptr == opts_ret", ptr == (u8_t *)opts_ret);
|
||||
return opts_ret;
|
||||
}
|
||||
return opts;
|
||||
}
|
||||
|
||||
/* Hook implementation for LWIP_HOOK_SOCKETS_SETSOCKOPT */
|
||||
int
|
||||
tcp_md5_setsockopt_hook(struct lwip_sock *sock, int level, int optname, const void *optval, socklen_t optlen, int *err)
|
||||
{
|
||||
LWIP_ASSERT("sock != NULL", sock != NULL);
|
||||
LWIP_ASSERT("err != NULL", err != NULL);
|
||||
|
||||
if ((level == IPPROTO_TCP) && (optname == TCP_MD5SIG)) {
|
||||
const struct tcp_md5sig *md5 = (const struct tcp_md5sig*)optval;
|
||||
if ((optval == NULL) || (optlen < sizeof(struct tcp_md5sig))) {
|
||||
*err = EINVAL;
|
||||
} else {
|
||||
if (sock->conn && (NETCONNTYPE_GROUP(netconn_type(sock->conn)) == NETCONN_TCP) && (sock->conn->pcb.tcp != NULL)) {
|
||||
if (tcp_md5_extarg_id == LWIP_TCP_PCB_NUM_EXT_ARG_ID_INVALID) {
|
||||
/* not initialized */
|
||||
*err = EINVAL;
|
||||
} else {
|
||||
struct tcp_md5_conn_info *info = tcp_md5_conn_info_alloc();
|
||||
if (info == NULL) {
|
||||
*err = ENOMEM;
|
||||
} else {
|
||||
int addr_valid = 0;
|
||||
/* OK, fill and link this request */
|
||||
memcpy(info->key, md5->tcpm_key, TCP_MD5SIG_MAXKEYLEN);
|
||||
info->key_len = md5->tcpm_keylen;
|
||||
memset(&info->remote_addr, 0, sizeof(info->remote_addr));
|
||||
if (md5->tcpm_addr.ss_family == AF_INET) {
|
||||
#if LWIP_IPV4
|
||||
const struct sockaddr_in *sin = (const struct sockaddr_in *)&md5->tcpm_addr;
|
||||
memcpy(&info->remote_addr, &sin->sin_addr, sizeof(sin->sin_addr));
|
||||
IP_SET_TYPE_VAL(info->remote_addr, IPADDR_TYPE_V4);
|
||||
info->remote_port = lwip_htons(sin->sin_port);
|
||||
addr_valid = 1;
|
||||
#endif /* LWIP_IPV4 */
|
||||
} else if (md5->tcpm_addr.ss_family == AF_INET6) {
|
||||
#if LWIP_IPV6
|
||||
const struct sockaddr_in6 *sin6 = (const struct sockaddr_in6 *)&md5->tcpm_addr;
|
||||
memcpy(&info->remote_addr, &sin6->sin6_addr, sizeof(sin6->sin6_addr));
|
||||
IP_SET_TYPE_VAL(info->remote_addr, IPADDR_TYPE_V6);
|
||||
info->remote_port = lwip_htons(sin6->sin6_port);
|
||||
addr_valid = 1;
|
||||
#endif /* LWIP_IPV6 */
|
||||
}
|
||||
if (addr_valid) {
|
||||
/* store it */
|
||||
tcp_ext_arg_set_callbacks(sock->conn->pcb.tcp, tcp_md5_extarg_id, &tcp_md5_ext_arg_callbacks);
|
||||
info->next = (struct tcp_md5_conn_info *)tcp_ext_arg_get(sock->conn->pcb.tcp, tcp_md5_extarg_id);
|
||||
tcp_ext_arg_set(sock->conn->pcb.tcp, tcp_md5_extarg_id, info);
|
||||
} else {
|
||||
*err = EINVAL;
|
||||
tcp_md5_conn_info_free(info);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/* not a tcp netconn */
|
||||
*err = EINVAL;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
84
contrib/addons/tcp_md5/tcp_md5.h
Normal file
84
contrib/addons/tcp_md5/tcp_md5.h
Normal file
@@ -0,0 +1,84 @@
|
||||
/*
|
||||
* Copyright (c) 2018 Simon Goldschmidt
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* Author: Simon Goldschmidt <goldsimon@gmx.de>
|
||||
*
|
||||
* To use the hooks in this file, make sure this file is included in LWIP_HOOK_FILENAME
|
||||
* and define these hooks:
|
||||
*
|
||||
* #define LWIP_HOOK_TCP_INPACKET_PCB(pcb, hdr, optlen, opt1len, opt2, p) tcp_md5_check_inpacket(pcb, hdr, optlen, opt1len, opt2, p)
|
||||
* #define LWIP_HOOK_TCP_OPT_LENGTH_SEGMENT(pcb, internal_len) tcp_md5_get_additional_option_length(pcb, internal_len)
|
||||
* #define LWIP_HOOK_TCP_ADD_TX_OPTIONS(p, hdr, pcb, opts) tcp_md5_add_tx_options(p, hdr, pcb, opts)
|
||||
*
|
||||
* #define LWIP_HOOK_SOCKETS_SETSOCKOPT(s, sock, level, optname, optval, optlen, err) tcp_md5_setsockopt_hook(sock, level, optname, optval, optlen, err)
|
||||
*/
|
||||
|
||||
#ifndef LWIP_HDR_CONTRIB_ADDONS_TCP_MD5_H
|
||||
#define LWIP_HDR_CONTRIB_ADDONS_TCP_MD5_H
|
||||
|
||||
#include "lwip/opt.h"
|
||||
#include "lwip/ip_addr.h"
|
||||
#include "lwip/err.h"
|
||||
|
||||
#include "lwip/priv/sockets_priv.h"
|
||||
#include "lwip/priv/tcp_priv.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* setsockopt definitions and structs: */
|
||||
|
||||
/* This is the optname (for level = IPPROTO_TCP) */
|
||||
#ifndef TCP_MD5SIG
|
||||
#define TCP_MD5SIG 14
|
||||
#endif
|
||||
|
||||
#define TCP_MD5SIG_MAXKEYLEN 80
|
||||
|
||||
/* This is the optval type */
|
||||
struct tcp_md5sig {
|
||||
struct sockaddr_storage tcpm_addr;
|
||||
u16_t __tcpm_pad1;
|
||||
u16_t tcpm_keylen;
|
||||
u32_t __tcpm_pad2;
|
||||
u8_t tcpm_key[TCP_MD5SIG_MAXKEYLEN];
|
||||
};
|
||||
|
||||
/* socket setsockopt hook: */
|
||||
int tcp_md5_setsockopt_hook(struct lwip_sock *sock, int level, int optname, const void *optval, u32_t optlen, int *err);
|
||||
|
||||
/* Internal hook functions */
|
||||
void tcp_md5_init(void);
|
||||
err_t tcp_md5_check_inpacket(struct tcp_pcb* pcb, struct tcp_hdr *hdr, u16_t optlen, u16_t opt1len, u8_t *opt2, struct pbuf *p);
|
||||
u8_t tcp_md5_get_additional_option_length(const struct tcp_pcb *pcb, u8_t internal_option_length);
|
||||
u32_t *tcp_md5_add_tx_options(struct pbuf *p, struct tcp_hdr *hdr, const struct tcp_pcb *pcb, u32_t *opts);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* LWIP_HDR_CONTRIB_ADDONS_TCP_MD5_H */
|
||||
@@ -0,0 +1,67 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>8.0.30703</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{7DA7C0AB-0982-4BF5-9324-F59A7A08D65B}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>CCodeGeneration</RootNamespace>
|
||||
<AssemblyName>CCodeGeneration</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="CFile.cs" />
|
||||
<Compile Include="Code.cs" />
|
||||
<Compile Include="CodeContainerBase.cs" />
|
||||
<Compile Include="CodeElement.cs" />
|
||||
<Compile Include="Comment.cs" />
|
||||
<Compile Include="EmptyLine.cs" />
|
||||
<Compile Include="Function.cs" />
|
||||
<Compile Include="CGenerator.cs" />
|
||||
<Compile Include="IfThenElse.cs" />
|
||||
<Compile Include="PlainText.cs" />
|
||||
<Compile Include="Switch.cs" />
|
||||
<Compile Include="PP_If.cs" />
|
||||
<Compile Include="PP_Ifdef.cs" />
|
||||
<Compile Include="PP_Include.cs" />
|
||||
<Compile Include="FunctionDeclaration.cs" />
|
||||
<Compile Include="PP_Macro.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="VariableDeclaration.cs" />
|
||||
<Compile Include="VariablePrototype.cs" />
|
||||
<Compile Include="VariableType.cs" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
||||
54
contrib/apps/LwipMibCompiler/CCodeGeneration/CFile.cs
Normal file
54
contrib/apps/LwipMibCompiler/CCodeGeneration/CFile.cs
Normal file
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
|
||||
namespace CCodeGeneration
|
||||
{
|
||||
public class CFile: CodeContainerBase
|
||||
{
|
||||
public CFile()
|
||||
{
|
||||
base.IncreaseLevel = false;
|
||||
}
|
||||
|
||||
public void Save(CGenerator generator)
|
||||
{
|
||||
if (generator == null)
|
||||
{
|
||||
throw new ArgumentNullException("generator");
|
||||
}
|
||||
|
||||
this.GenerateCode(0, generator);
|
||||
}
|
||||
}
|
||||
}
|
||||
119
contrib/apps/LwipMibCompiler/CCodeGeneration/CGenerator.cs
Normal file
119
contrib/apps/LwipMibCompiler/CCodeGeneration/CGenerator.cs
Normal file
@@ -0,0 +1,119 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace CCodeGeneration
|
||||
{
|
||||
public class CGenerator
|
||||
{
|
||||
public TextWriter OutputStream { get; private set; }
|
||||
public string File { get; private set; }
|
||||
public uint IndentCount { get; private set; }
|
||||
public string IndentChar { get; private set; }
|
||||
public string NewLine { get; private set; }
|
||||
|
||||
public CGenerator(System.IO.TextWriter outputStream, string file, uint indentCount, string indentChar, string newLine)
|
||||
{
|
||||
this.OutputStream = outputStream;
|
||||
this.File = file;
|
||||
this.IndentCount = indentCount;
|
||||
this.IndentChar = indentChar;
|
||||
this.NewLine = newLine;
|
||||
}
|
||||
|
||||
public string FileName
|
||||
{
|
||||
get
|
||||
{
|
||||
if (!String.IsNullOrWhiteSpace(this.File))
|
||||
{
|
||||
return Path.GetFileName(this.File);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void WriteSequence(string value, uint repetitions)
|
||||
{
|
||||
while (repetitions > 0)
|
||||
{
|
||||
this.OutputStream.Write(value);
|
||||
repetitions--;
|
||||
}
|
||||
}
|
||||
|
||||
public void IndentLine(int level)
|
||||
{
|
||||
while (level > 0)
|
||||
{
|
||||
WriteSequence(this.IndentChar, this.IndentCount);
|
||||
level--;
|
||||
}
|
||||
}
|
||||
|
||||
public void WriteNewLine()
|
||||
{
|
||||
this.OutputStream.Write(this.NewLine);
|
||||
}
|
||||
|
||||
public void WriteMultilineString(string value, int level = 0)
|
||||
{
|
||||
if (String.IsNullOrEmpty(value))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// only \n and \r\n are recognized as linebreaks
|
||||
string[] lines = value.Split(new char[] { '\n' }, StringSplitOptions.None);
|
||||
|
||||
for (int l = 0; l < (lines.Length - 1); l++)
|
||||
{
|
||||
if (lines[l].EndsWith("\r"))
|
||||
{
|
||||
this.OutputStream.Write(lines[l].Substring(0, lines[l].Length-1));
|
||||
}
|
||||
else
|
||||
{
|
||||
this.OutputStream.Write(lines[l]);
|
||||
}
|
||||
|
||||
this.WriteNewLine();
|
||||
this.IndentLine(level);
|
||||
}
|
||||
|
||||
this.OutputStream.Write(lines[lines.Length - 1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
56
contrib/apps/LwipMibCompiler/CCodeGeneration/Code.cs
Normal file
56
contrib/apps/LwipMibCompiler/CCodeGeneration/Code.cs
Normal file
@@ -0,0 +1,56 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
namespace CCodeGeneration
|
||||
{
|
||||
public class Code: CodeElement
|
||||
{
|
||||
public string Code_ { get; set; }
|
||||
|
||||
public Code()
|
||||
{
|
||||
}
|
||||
|
||||
public Code(string code)
|
||||
{
|
||||
this.Code_ = code;
|
||||
}
|
||||
|
||||
public override void GenerateCode(int level, CGenerator generator)
|
||||
{
|
||||
generator.IndentLine(level);
|
||||
generator.WriteMultilineString(this.Code_, level);
|
||||
generator.WriteNewLine();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,139 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
|
||||
namespace CCodeGeneration
|
||||
{
|
||||
public class CodeContainerBase: CodeElement
|
||||
{
|
||||
private readonly List<CodeElement> declarations = new List<CodeElement>();
|
||||
private readonly List<CodeElement> innerElements = new List<CodeElement>();
|
||||
private bool increaseLevel = true;
|
||||
|
||||
public List<CodeElement> Declarations
|
||||
{
|
||||
get { return this.declarations; }
|
||||
}
|
||||
|
||||
public List<CodeElement> InnerElements
|
||||
{
|
||||
get { return this.innerElements; }
|
||||
}
|
||||
|
||||
protected bool IncreaseLevel
|
||||
{
|
||||
get { return this.increaseLevel; }
|
||||
set { this.increaseLevel = value; }
|
||||
}
|
||||
|
||||
public void AddElements(IList<CodeElement> elements, params CodeElement[] spacerElements)
|
||||
{
|
||||
if (elements != null)
|
||||
{
|
||||
if ((spacerElements == null) || (spacerElements.Length == 0))
|
||||
{
|
||||
this.innerElements.AddRange(elements);
|
||||
}
|
||||
else
|
||||
{
|
||||
bool spacerAdded = false;
|
||||
|
||||
foreach (CodeElement element in elements)
|
||||
{
|
||||
this.innerElements.Add(element);
|
||||
this.innerElements.AddRange(spacerElements);
|
||||
spacerAdded = true;
|
||||
}
|
||||
|
||||
if (spacerAdded)
|
||||
{
|
||||
// remove last spacer again
|
||||
this.innerElements.RemoveRange(this.innerElements.Count - spacerElements.Length, spacerElements.Length);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public CodeElement AddElement(CodeElement element)
|
||||
{
|
||||
if (element != null)
|
||||
{
|
||||
this.innerElements.Add(element);
|
||||
}
|
||||
|
||||
return element;
|
||||
}
|
||||
|
||||
public Code AddCode(string code)
|
||||
{
|
||||
return this.AddElement(new Code(code)) as Code;
|
||||
}
|
||||
|
||||
public Code AddCodeFormat(string codeFormat, params object[] args)
|
||||
{
|
||||
return this.AddElement(new Code(String.Format(codeFormat, args))) as Code;
|
||||
}
|
||||
|
||||
public CodeElement AddDeclaration(CodeElement declaration)
|
||||
{
|
||||
if (declaration != null)
|
||||
{
|
||||
this.declarations.Add(declaration);
|
||||
}
|
||||
|
||||
return declaration;
|
||||
}
|
||||
|
||||
public override void GenerateCode(int level, CGenerator generator)
|
||||
{
|
||||
if (this.increaseLevel)
|
||||
level++;
|
||||
|
||||
if (this.declarations.Count > 0)
|
||||
{
|
||||
foreach (CodeElement element in this.declarations)
|
||||
{
|
||||
element.GenerateCode(level, generator);
|
||||
}
|
||||
|
||||
EmptyLine.SingleLine.GenerateCode(level, generator);
|
||||
}
|
||||
|
||||
foreach (CodeElement element in this.innerElements)
|
||||
{
|
||||
element.GenerateCode(level, generator);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
41
contrib/apps/LwipMibCompiler/CCodeGeneration/CodeElement.cs
Normal file
41
contrib/apps/LwipMibCompiler/CCodeGeneration/CodeElement.cs
Normal file
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
namespace CCodeGeneration
|
||||
{
|
||||
public class CodeElement
|
||||
{
|
||||
public virtual void GenerateCode(int level, CGenerator generator)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
75
contrib/apps/LwipMibCompiler/CCodeGeneration/Comment.cs
Normal file
75
contrib/apps/LwipMibCompiler/CCodeGeneration/Comment.cs
Normal file
@@ -0,0 +1,75 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
namespace CCodeGeneration
|
||||
{
|
||||
public class Comment: CodeElement
|
||||
{
|
||||
public const string CommentStart = "/*";
|
||||
public const string CommentEnd = "*/";
|
||||
|
||||
public string Comment_ { get; set; }
|
||||
public bool SingleLine { get; set; }
|
||||
|
||||
public Comment()
|
||||
{
|
||||
}
|
||||
|
||||
public Comment(string comment, bool singleLine = false)
|
||||
{
|
||||
this.Comment_ = comment;
|
||||
this.SingleLine = singleLine;
|
||||
}
|
||||
|
||||
public override void GenerateCode(int level, CGenerator generator)
|
||||
{
|
||||
generator.IndentLine(level);
|
||||
generator.OutputStream.Write(CommentStart);
|
||||
|
||||
if (!this.SingleLine)
|
||||
{
|
||||
generator.WriteNewLine();
|
||||
generator.IndentLine(level);
|
||||
generator.WriteMultilineString(this.Comment_, level);
|
||||
generator.WriteNewLine();
|
||||
generator.IndentLine(level);
|
||||
}
|
||||
else
|
||||
{
|
||||
generator.OutputStream.Write(" " + Comment_ + " ");
|
||||
}
|
||||
|
||||
generator.OutputStream.Write(CommentEnd);
|
||||
generator.WriteNewLine();
|
||||
}
|
||||
}
|
||||
}
|
||||
64
contrib/apps/LwipMibCompiler/CCodeGeneration/EmptyLine.cs
Normal file
64
contrib/apps/LwipMibCompiler/CCodeGeneration/EmptyLine.cs
Normal file
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
namespace CCodeGeneration
|
||||
{
|
||||
public class EmptyLine : CodeElement
|
||||
{
|
||||
public static readonly EmptyLine SingleLine = new EmptyLine();
|
||||
public static readonly EmptyLine TwoLines = new EmptyLine(2);
|
||||
public static readonly EmptyLine ThreeLines = new EmptyLine(3);
|
||||
|
||||
public uint Count { get; set; }
|
||||
|
||||
public EmptyLine()
|
||||
{
|
||||
this.Count = 1;
|
||||
}
|
||||
|
||||
public EmptyLine(uint count)
|
||||
{
|
||||
this.Count = count;
|
||||
}
|
||||
|
||||
public override void GenerateCode(int level, CGenerator generator)
|
||||
{
|
||||
uint c = this.Count;
|
||||
|
||||
while (c > 0)
|
||||
{
|
||||
generator.WriteNewLine();
|
||||
c--;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
129
contrib/apps/LwipMibCompiler/CCodeGeneration/Function.cs
Normal file
129
contrib/apps/LwipMibCompiler/CCodeGeneration/Function.cs
Normal file
@@ -0,0 +1,129 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace CCodeGeneration
|
||||
{
|
||||
public class Function: CodeContainerBase
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public bool IsStatic { get; set; }
|
||||
|
||||
private readonly List<VariableType> parameter = new List<VariableType>();
|
||||
private VariableType returnType = VariableType.Void;
|
||||
|
||||
public Function()
|
||||
{
|
||||
}
|
||||
|
||||
public Function(string name, bool isStatic = false)
|
||||
{
|
||||
this.Name = name;
|
||||
this.IsStatic = isStatic;
|
||||
}
|
||||
|
||||
public List<VariableType> Parameter
|
||||
{
|
||||
get { return this.parameter; }
|
||||
}
|
||||
|
||||
public VariableType ReturnType
|
||||
{
|
||||
get { return this.returnType; }
|
||||
set
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
throw new ArgumentNullException("ReturnValue");
|
||||
}
|
||||
this.returnType = value;
|
||||
}
|
||||
}
|
||||
|
||||
public static Function FromDeclaration(FunctionDeclaration decl)
|
||||
{
|
||||
Function result = new Function(decl.Name, decl.IsStatic);
|
||||
result.ReturnType = decl.ReturnType.Clone() as VariableType;
|
||||
|
||||
foreach (VariableType param in decl.Parameter)
|
||||
{
|
||||
result.parameter.Add(param.Clone() as VariableType);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public override void GenerateCode(int level, CGenerator generator)
|
||||
{
|
||||
generator.IndentLine(level);
|
||||
|
||||
if (this.IsStatic)
|
||||
{
|
||||
generator.OutputStream.Write("static ");
|
||||
}
|
||||
|
||||
this.returnType.GenerateCode(generator);
|
||||
generator.OutputStream.Write(" " + this.Name + "(");
|
||||
|
||||
if (this.Parameter.Count > 0)
|
||||
{
|
||||
for (int i = 0; i < this.parameter.Count; i++)
|
||||
{
|
||||
this.parameter[i].GenerateCode(generator);
|
||||
|
||||
if (i < (this.parameter.Count - 1))
|
||||
{
|
||||
generator.OutputStream.Write(", ");
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
generator.OutputStream.Write("void");
|
||||
}
|
||||
|
||||
generator.OutputStream.Write(")");
|
||||
generator.WriteNewLine();
|
||||
generator.IndentLine(level);
|
||||
generator.OutputStream.Write("{");
|
||||
generator.WriteNewLine();
|
||||
|
||||
base.GenerateCode(level, generator);
|
||||
|
||||
generator.IndentLine(level);
|
||||
generator.OutputStream.Write("}");
|
||||
generator.WriteNewLine();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,114 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace CCodeGeneration
|
||||
{
|
||||
public class FunctionDeclaration: CodeElement
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public bool IsStatic { get; set; }
|
||||
public bool IsExtern { get; set; }
|
||||
|
||||
private readonly List<VariableType> parameter = new List<VariableType>();
|
||||
private VariableType returnType = VariableType.Void;
|
||||
|
||||
public FunctionDeclaration()
|
||||
{
|
||||
}
|
||||
|
||||
public FunctionDeclaration(string name, bool isStatic = false, bool isExtern = false)
|
||||
{
|
||||
this.Name = name;
|
||||
this.IsStatic = isStatic;
|
||||
this.IsExtern = isExtern;
|
||||
}
|
||||
|
||||
public List<VariableType> Parameter
|
||||
{
|
||||
get { return this.parameter; }
|
||||
}
|
||||
|
||||
public VariableType ReturnType
|
||||
{
|
||||
get { return this.returnType; }
|
||||
set
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
throw new ArgumentNullException("ReturnValue");
|
||||
}
|
||||
this.returnType = value;
|
||||
}
|
||||
}
|
||||
|
||||
public override void GenerateCode(int level, CGenerator generator)
|
||||
{
|
||||
generator.IndentLine(level);
|
||||
|
||||
if (this.IsExtern)
|
||||
{
|
||||
generator.OutputStream.Write("extern ");
|
||||
}
|
||||
|
||||
if (this.IsStatic)
|
||||
{
|
||||
generator.OutputStream.Write("static ");
|
||||
}
|
||||
|
||||
this.returnType.GenerateCode(generator);
|
||||
generator.OutputStream.Write(" " + this.Name + "(");
|
||||
|
||||
if (this.Parameter.Count > 0)
|
||||
{
|
||||
for (int i = 0; i < this.parameter.Count; i++)
|
||||
{
|
||||
this.parameter[i].GenerateCode(generator);
|
||||
|
||||
if (i < (this.parameter.Count - 1))
|
||||
{
|
||||
generator.OutputStream.Write(", ");
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
generator.OutputStream.Write("void");
|
||||
}
|
||||
|
||||
generator.OutputStream.Write(");");
|
||||
generator.WriteNewLine();
|
||||
}
|
||||
}
|
||||
}
|
||||
137
contrib/apps/LwipMibCompiler/CCodeGeneration/IfThenElse.cs
Normal file
137
contrib/apps/LwipMibCompiler/CCodeGeneration/IfThenElse.cs
Normal file
@@ -0,0 +1,137 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace CCodeGeneration
|
||||
{
|
||||
public class ElseIf : CodeContainerBase
|
||||
{
|
||||
public string Condition { get; set; }
|
||||
|
||||
public ElseIf()
|
||||
{
|
||||
}
|
||||
|
||||
public ElseIf(string condition)
|
||||
{
|
||||
this.Condition = condition;
|
||||
}
|
||||
|
||||
public override void GenerateCode(int level, CGenerator generator)
|
||||
{
|
||||
if (!String.IsNullOrWhiteSpace(this.Condition))
|
||||
{
|
||||
generator.IndentLine(level);
|
||||
generator.OutputStream.Write(String.Format("else if ({0})", this.Condition));
|
||||
generator.WriteNewLine();
|
||||
generator.IndentLine(level);
|
||||
generator.OutputStream.Write("{");
|
||||
generator.WriteNewLine();
|
||||
|
||||
base.GenerateCode(level, generator);
|
||||
|
||||
generator.IndentLine(level);
|
||||
generator.OutputStream.Write("}");
|
||||
generator.WriteNewLine();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class IfThenElse: CodeContainerBase
|
||||
{
|
||||
public string Condition { get; set; }
|
||||
|
||||
private List<ElseIf> elseIf = new List<ElseIf>();
|
||||
private CodeContainerBase else_ = new CodeContainerBase();
|
||||
|
||||
public IfThenElse()
|
||||
{
|
||||
}
|
||||
|
||||
public IfThenElse(string condition)
|
||||
{
|
||||
this.Condition = condition;
|
||||
}
|
||||
|
||||
public List<ElseIf> ElseIf
|
||||
{
|
||||
get { return this.elseIf; }
|
||||
}
|
||||
|
||||
public CodeContainerBase Else
|
||||
{
|
||||
get { return this.else_; }
|
||||
}
|
||||
|
||||
public override void GenerateCode(int level, CGenerator generator)
|
||||
{
|
||||
if (!String.IsNullOrWhiteSpace(this.Condition))
|
||||
{
|
||||
generator.IndentLine(level);
|
||||
generator.OutputStream.Write(String.Format("if ({0})", this.Condition));
|
||||
generator.WriteNewLine();
|
||||
generator.IndentLine(level);
|
||||
generator.OutputStream.Write("{");
|
||||
generator.WriteNewLine();
|
||||
|
||||
base.GenerateCode(level, generator);
|
||||
|
||||
generator.IndentLine(level);
|
||||
generator.OutputStream.Write("}");
|
||||
generator.WriteNewLine();
|
||||
|
||||
foreach (ElseIf elif in this.elseIf)
|
||||
{
|
||||
elif.GenerateCode(level, generator);
|
||||
}
|
||||
|
||||
if (this.else_.InnerElements.Count > 0)
|
||||
{
|
||||
generator.IndentLine(level);
|
||||
generator.OutputStream.Write("else");
|
||||
generator.WriteNewLine();
|
||||
generator.IndentLine(level);
|
||||
generator.OutputStream.Write("{");
|
||||
generator.WriteNewLine();
|
||||
|
||||
this.else_.GenerateCode(level, generator);
|
||||
|
||||
generator.IndentLine(level);
|
||||
generator.OutputStream.Write("}");
|
||||
generator.WriteNewLine();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
67
contrib/apps/LwipMibCompiler/CCodeGeneration/PP_If.cs
Normal file
67
contrib/apps/LwipMibCompiler/CCodeGeneration/PP_If.cs
Normal file
@@ -0,0 +1,67 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
|
||||
namespace CCodeGeneration
|
||||
{
|
||||
public class PP_If: CodeContainerBase
|
||||
{
|
||||
public string Condition { get; set; }
|
||||
|
||||
public PP_If()
|
||||
{
|
||||
base.IncreaseLevel = false;
|
||||
}
|
||||
|
||||
public PP_If(string condition)
|
||||
: this()
|
||||
{
|
||||
this.Condition = condition;
|
||||
}
|
||||
|
||||
|
||||
public override void GenerateCode(int level, CGenerator generator)
|
||||
{
|
||||
if (!String.IsNullOrWhiteSpace(this.Condition))
|
||||
{
|
||||
generator.OutputStream.Write("#if " + this.Condition);
|
||||
generator.WriteNewLine();
|
||||
|
||||
base.GenerateCode(level, generator);
|
||||
|
||||
generator.OutputStream.Write("#endif /* " + this.Condition + " */");
|
||||
generator.WriteNewLine();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
76
contrib/apps/LwipMibCompiler/CCodeGeneration/PP_Ifdef.cs
Normal file
76
contrib/apps/LwipMibCompiler/CCodeGeneration/PP_Ifdef.cs
Normal file
@@ -0,0 +1,76 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
|
||||
namespace CCodeGeneration
|
||||
{
|
||||
public class PP_Ifdef: CodeContainerBase
|
||||
{
|
||||
public string Macro { get; set; }
|
||||
public bool Inverted { get; set; }
|
||||
|
||||
public PP_Ifdef()
|
||||
{
|
||||
base.IncreaseLevel = false;
|
||||
}
|
||||
|
||||
public PP_Ifdef(string macro, bool inverted = false)
|
||||
: this()
|
||||
{
|
||||
this.Macro = macro;
|
||||
this.Inverted = inverted;
|
||||
}
|
||||
|
||||
|
||||
public override void GenerateCode(int level, CGenerator generator)
|
||||
{
|
||||
if (!String.IsNullOrWhiteSpace(this.Macro))
|
||||
{
|
||||
if (this.Inverted)
|
||||
{
|
||||
generator.OutputStream.Write("#ifndef " + this.Macro);
|
||||
}
|
||||
else
|
||||
{
|
||||
generator.OutputStream.Write("#ifdef " + this.Macro);
|
||||
}
|
||||
generator.WriteNewLine();
|
||||
|
||||
base.GenerateCode(level, generator);
|
||||
|
||||
generator.OutputStream.Write("#endif /* " + this.Macro + " */");
|
||||
generator.WriteNewLine();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
71
contrib/apps/LwipMibCompiler/CCodeGeneration/PP_Include.cs
Normal file
71
contrib/apps/LwipMibCompiler/CCodeGeneration/PP_Include.cs
Normal file
@@ -0,0 +1,71 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
|
||||
namespace CCodeGeneration
|
||||
{
|
||||
public class PP_Include : CodeElement
|
||||
{
|
||||
public string File { get; set; }
|
||||
public bool IsLocal { get; set; }
|
||||
|
||||
public PP_Include()
|
||||
{
|
||||
this.IsLocal = true;
|
||||
}
|
||||
|
||||
public PP_Include(string file, bool isLocal = true)
|
||||
{
|
||||
this.File = file;
|
||||
this.IsLocal = isLocal;
|
||||
}
|
||||
|
||||
public override void GenerateCode(int level, CGenerator generator)
|
||||
{
|
||||
if (!String.IsNullOrWhiteSpace(this.File))
|
||||
{
|
||||
// includes are never indented
|
||||
if (this.IsLocal)
|
||||
{
|
||||
generator.OutputStream.Write("#include \"" + this.File + "\"");
|
||||
}
|
||||
else
|
||||
{
|
||||
generator.OutputStream.Write("#include <" + this.File + ">");
|
||||
}
|
||||
|
||||
generator.WriteNewLine();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
59
contrib/apps/LwipMibCompiler/CCodeGeneration/PP_Macro.cs
Normal file
59
contrib/apps/LwipMibCompiler/CCodeGeneration/PP_Macro.cs
Normal file
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
namespace CCodeGeneration
|
||||
{
|
||||
public class PP_Macro: CodeElement
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public string Value { get; set; }
|
||||
|
||||
public PP_Macro()
|
||||
{
|
||||
}
|
||||
|
||||
public PP_Macro(string name, string value)
|
||||
{
|
||||
this.Name = name;
|
||||
this.Value = value;
|
||||
}
|
||||
|
||||
|
||||
public override void GenerateCode(int level, CGenerator generator)
|
||||
{
|
||||
// macros are not indented at all
|
||||
generator.OutputStream.Write("#define " + this.Name + " ");
|
||||
generator.WriteMultilineString(this.Value);
|
||||
generator.WriteNewLine();
|
||||
}
|
||||
}
|
||||
}
|
||||
49
contrib/apps/LwipMibCompiler/CCodeGeneration/PlainText.cs
Normal file
49
contrib/apps/LwipMibCompiler/CCodeGeneration/PlainText.cs
Normal file
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
namespace CCodeGeneration
|
||||
{
|
||||
public class PlainText : CodeElement
|
||||
{
|
||||
public string Value { get; set; }
|
||||
|
||||
public PlainText(string value)
|
||||
{
|
||||
this.Value = value;
|
||||
}
|
||||
|
||||
public override void GenerateCode(int level, CGenerator generator)
|
||||
{
|
||||
generator.WriteMultilineString(this.Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// Allgemeine Informationen über eine Assembly werden über die folgenden
|
||||
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
|
||||
// die mit einer Assembly verknüpft sind.
|
||||
[assembly: AssemblyTitle("CCodeGeneration")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("CCodeGeneration")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2015")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar
|
||||
// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von
|
||||
// COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
|
||||
[assembly: Guid("8f07a0fa-86f4-48a0-97c7-f94fc5c3f103")]
|
||||
|
||||
// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
|
||||
//
|
||||
// Hauptversion
|
||||
// Nebenversion
|
||||
// Buildnummer
|
||||
// Revision
|
||||
//
|
||||
// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
|
||||
// übernehmen, indem Sie "*" eingeben:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
146
contrib/apps/LwipMibCompiler/CCodeGeneration/Switch.cs
Normal file
146
contrib/apps/LwipMibCompiler/CCodeGeneration/Switch.cs
Normal file
@@ -0,0 +1,146 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace CCodeGeneration
|
||||
{
|
||||
public class SwitchCase : CodeContainerBase
|
||||
{
|
||||
public string Value { get; set; }
|
||||
|
||||
public SwitchCase()
|
||||
{
|
||||
}
|
||||
|
||||
public SwitchCase(string value)
|
||||
{
|
||||
this.Value = value;
|
||||
}
|
||||
|
||||
public bool IsDefault
|
||||
{
|
||||
get { return (this.Value.ToLowerInvariant() == "default"); }
|
||||
}
|
||||
|
||||
public static SwitchCase GenerateDefault()
|
||||
{
|
||||
return new SwitchCase("default");
|
||||
}
|
||||
|
||||
public override void GenerateCode(int level, CGenerator generator)
|
||||
{
|
||||
if (!String.IsNullOrWhiteSpace(this.Value))
|
||||
{
|
||||
generator.IndentLine(level);
|
||||
if (this.IsDefault)
|
||||
{
|
||||
generator.OutputStream.Write("default:");
|
||||
}
|
||||
else
|
||||
{
|
||||
generator.OutputStream.Write(String.Format("case {0}:", this.Value));
|
||||
}
|
||||
generator.WriteNewLine();
|
||||
generator.IndentLine(level + 1);
|
||||
generator.OutputStream.Write("{");
|
||||
generator.WriteNewLine();
|
||||
|
||||
base.GenerateCode(level + 1, generator);
|
||||
|
||||
generator.IndentLine(level + 1);
|
||||
generator.OutputStream.Write("}");
|
||||
generator.WriteNewLine();
|
||||
|
||||
generator.IndentLine(level + 1);
|
||||
generator.OutputStream.Write("break;");
|
||||
generator.WriteNewLine();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class Switch: CodeElement
|
||||
{
|
||||
public string SwitchVar { get; set; }
|
||||
|
||||
private List<SwitchCase> switches = new List<SwitchCase>();
|
||||
|
||||
public Switch()
|
||||
{
|
||||
}
|
||||
|
||||
public Switch(string switchVar)
|
||||
{
|
||||
this.SwitchVar = switchVar;
|
||||
}
|
||||
|
||||
public List<SwitchCase> Switches
|
||||
{
|
||||
get { return this.switches; }
|
||||
}
|
||||
|
||||
public override void GenerateCode(int level, CGenerator generator)
|
||||
{
|
||||
if (!String.IsNullOrWhiteSpace(this.SwitchVar))
|
||||
{
|
||||
generator.IndentLine(level);
|
||||
generator.OutputStream.Write(String.Format("switch ({0})", this.SwitchVar));
|
||||
generator.WriteNewLine();
|
||||
generator.IndentLine(level);
|
||||
generator.OutputStream.Write("{");
|
||||
generator.WriteNewLine();
|
||||
|
||||
SwitchCase defaultCase = null; // generate 'default' always as last case
|
||||
foreach (SwitchCase switchCase in this.switches)
|
||||
{
|
||||
if (switchCase.IsDefault)
|
||||
{
|
||||
defaultCase = switchCase;
|
||||
}
|
||||
else
|
||||
{
|
||||
switchCase.GenerateCode(level + 1, generator);
|
||||
}
|
||||
}
|
||||
if (defaultCase != null)
|
||||
{
|
||||
defaultCase.GenerateCode(level + 1, generator);
|
||||
}
|
||||
|
||||
generator.IndentLine(level);
|
||||
generator.OutputStream.Write("}");
|
||||
generator.WriteNewLine();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
|
||||
namespace CCodeGeneration
|
||||
{
|
||||
public class VariableDeclaration : CodeElement
|
||||
{
|
||||
public VariableType Type { get; set; }
|
||||
public string InitialValue { get; set; }
|
||||
public bool IsStatic { get; set; }
|
||||
|
||||
public VariableDeclaration()
|
||||
: base()
|
||||
{
|
||||
}
|
||||
|
||||
public VariableDeclaration(VariableType type, string initialValue = null, bool isStatic = false) :
|
||||
base()
|
||||
{
|
||||
this.Type = type;
|
||||
this.InitialValue = initialValue;
|
||||
this.IsStatic = isStatic;
|
||||
}
|
||||
|
||||
public override void GenerateCode(int level, CGenerator generator)
|
||||
{
|
||||
if (this.Type != null)
|
||||
{
|
||||
generator.IndentLine(level);
|
||||
|
||||
if (this.IsStatic)
|
||||
{
|
||||
generator.OutputStream.Write("static ");
|
||||
}
|
||||
|
||||
// declare the variable
|
||||
this.Type.GenerateCode(generator);
|
||||
|
||||
if (!String.IsNullOrWhiteSpace(this.InitialValue))
|
||||
{
|
||||
// add initialization value
|
||||
generator.OutputStream.Write(" = ");
|
||||
generator.WriteMultilineString(this.InitialValue, level);
|
||||
}
|
||||
|
||||
generator.OutputStream.Write(";");
|
||||
generator.WriteNewLine();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
namespace CCodeGeneration
|
||||
{
|
||||
public class VariablePrototype : CodeElement
|
||||
{
|
||||
public VariableType Type { get; set; }
|
||||
|
||||
public VariablePrototype()
|
||||
: base()
|
||||
{
|
||||
}
|
||||
|
||||
public VariablePrototype(VariableType type) :
|
||||
base()
|
||||
{
|
||||
Type = type;
|
||||
}
|
||||
|
||||
public static VariablePrototype FromVariableDeclaration(VariableDeclaration declaration)
|
||||
{
|
||||
return new VariablePrototype(declaration.Type);
|
||||
}
|
||||
|
||||
|
||||
public override void GenerateCode(int level, CGenerator generator)
|
||||
{
|
||||
if (this.Type != null)
|
||||
{
|
||||
generator.IndentLine(level);
|
||||
|
||||
generator.OutputStream.Write("extern ");
|
||||
|
||||
// declare the variable
|
||||
this.Type.GenerateCode(generator);
|
||||
|
||||
generator.OutputStream.Write(";");
|
||||
generator.WriteNewLine();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
130
contrib/apps/LwipMibCompiler/CCodeGeneration/VariableType.cs
Normal file
130
contrib/apps/LwipMibCompiler/CCodeGeneration/VariableType.cs
Normal file
@@ -0,0 +1,130 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Text;
|
||||
|
||||
namespace CCodeGeneration
|
||||
{
|
||||
public enum ConstType
|
||||
{
|
||||
None,
|
||||
Value,
|
||||
Indirection,
|
||||
Both
|
||||
}
|
||||
|
||||
public class VariableType : ICloneable
|
||||
{
|
||||
public const string VoidString = "void";
|
||||
public static readonly VariableType Void = new VariableType(null, "void");
|
||||
|
||||
public string Name { get; set; }
|
||||
public string Type { get; set; }
|
||||
public string Indirection { get; set; }
|
||||
public ConstType Const { get; set; }
|
||||
public string ArraySpecifier { get; set; }
|
||||
|
||||
public VariableType()
|
||||
{
|
||||
}
|
||||
|
||||
public VariableType(string name, string type, string indirection = null, ConstType const_ = ConstType.None, string arraySpecifier = null)
|
||||
{
|
||||
this.Name = name;
|
||||
this.Type = type;
|
||||
this.Indirection = indirection;
|
||||
this.Const = const_;
|
||||
this.ArraySpecifier = arraySpecifier;
|
||||
}
|
||||
|
||||
public void GenerateCode(CGenerator generator)
|
||||
{
|
||||
if (!String.IsNullOrWhiteSpace(this.Type))
|
||||
{
|
||||
generator.OutputStream.Write(this.ToString().Trim());
|
||||
}
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
if (!String.IsNullOrWhiteSpace(this.Type))
|
||||
{
|
||||
StringBuilder vt = new StringBuilder();
|
||||
|
||||
if ((this.Const == ConstType.Value) || (this.Const == ConstType.Both))
|
||||
{
|
||||
vt.Append("const ");
|
||||
}
|
||||
|
||||
vt.Append(this.Type);
|
||||
vt.Append(" ");
|
||||
|
||||
if (!String.IsNullOrWhiteSpace(this.Indirection))
|
||||
{
|
||||
vt.Append(this.Indirection);
|
||||
}
|
||||
|
||||
if ((this.Const == ConstType.Indirection) || (this.Const == ConstType.Both))
|
||||
{
|
||||
vt.Append("const ");
|
||||
}
|
||||
|
||||
if (!String.IsNullOrWhiteSpace(this.Name))
|
||||
{
|
||||
vt.Append(this.Name);
|
||||
}
|
||||
|
||||
if (this.ArraySpecifier != null)
|
||||
{
|
||||
vt.Append("[");
|
||||
vt.Append(this.ArraySpecifier);
|
||||
vt.Append("]");
|
||||
}
|
||||
|
||||
return vt.ToString().Trim();
|
||||
}
|
||||
|
||||
return base.ToString();
|
||||
}
|
||||
|
||||
#region ICloneable Member
|
||||
|
||||
public object Clone()
|
||||
{
|
||||
// we only have value types as members -> simply use .net base function
|
||||
return this.MemberwiseClone();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
47
contrib/apps/LwipMibCompiler/LwipMibCompiler.sln
Normal file
47
contrib/apps/LwipMibCompiler/LwipMibCompiler.sln
Normal file
@@ -0,0 +1,47 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||
# Visual Studio 2010
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LwipMibCompiler", "LwipMibCompiler\LwipMibCompiler.csproj", "{C25D5640-D999-49BD-82E0-A1975296A91E}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LwipSnmpCodeGeneration", "LwipSnmpCodeGeneration\LwipSnmpCodeGeneration.csproj", "{AABCAB90-1540-45D4-A159-14831A54E9A3}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CCodeGeneration", "CCodeGeneration\CCodeGeneration.csproj", "{7DA7C0AB-0982-4BF5-9324-F59A7A08D65B}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpSnmpLib.Mib", "SharpSnmpLib\SharpSnmpLib.Mib.csproj", "{CBE20411-5DB7-487D-825D-7694267BB6F5}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MibViewer", "MibViewer\MibViewer.csproj", "{86CC0B65-7985-4017-A252-0A7A18DCAEF3}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{7DA7C0AB-0982-4BF5-9324-F59A7A08D65B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7DA7C0AB-0982-4BF5-9324-F59A7A08D65B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7DA7C0AB-0982-4BF5-9324-F59A7A08D65B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{7DA7C0AB-0982-4BF5-9324-F59A7A08D65B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{86CC0B65-7985-4017-A252-0A7A18DCAEF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{86CC0B65-7985-4017-A252-0A7A18DCAEF3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{86CC0B65-7985-4017-A252-0A7A18DCAEF3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{86CC0B65-7985-4017-A252-0A7A18DCAEF3}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{AABCAB90-1540-45D4-A159-14831A54E9A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AABCAB90-1540-45D4-A159-14831A54E9A3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AABCAB90-1540-45D4-A159-14831A54E9A3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AABCAB90-1540-45D4-A159-14831A54E9A3}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C25D5640-D999-49BD-82E0-A1975296A91E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C25D5640-D999-49BD-82E0-A1975296A91E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C25D5640-D999-49BD-82E0-A1975296A91E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C25D5640-D999-49BD-82E0-A1975296A91E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{CBE20411-5DB7-487D-825D-7694267BB6F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{CBE20411-5DB7-487D-825D-7694267BB6F5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{CBE20411-5DB7-487D-825D-7694267BB6F5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{CBE20411-5DB7-487D-825D-7694267BB6F5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(MonoDevelopProperties) = preSolution
|
||||
StartupItem = LwipMibCompiler\LwipMibCompiler.csproj
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>8.0.30703</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{C25D5640-D999-49BD-82E0-A1975296A91E}</ProjectGuid>
|
||||
<OutputType>Exe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>LwipMibCompiler</RootNamespace>
|
||||
<AssemblyName>LwipMibCompiler</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
|
||||
<CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Optimize>false</Optimize>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="app.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\CCodeGeneration\CCodeGeneration.csproj">
|
||||
<Project>{7DA7C0AB-0982-4BF5-9324-F59A7A08D65B}</Project>
|
||||
<Name>CCodeGeneration</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\LwipSnmpCodeGeneration\LwipSnmpCodeGeneration.csproj">
|
||||
<Project>{AABCAB90-1540-45D4-A159-14831A54E9A3}</Project>
|
||||
<Name>LwipSnmpCodeGeneration</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\SharpSnmpLib\SharpSnmpLib.Mib.csproj">
|
||||
<Project>{CBE20411-5DB7-487D-825D-7694267BB6F5}</Project>
|
||||
<Name>SharpSnmpLib.Mib</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<PropertyGroup />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
||||
480
contrib/apps/LwipMibCompiler/LwipMibCompiler/Program.cs
Normal file
480
contrib/apps/LwipMibCompiler/LwipMibCompiler/Program.cs
Normal file
@@ -0,0 +1,480 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Text.RegularExpressions;
|
||||
using CCodeGeneration;
|
||||
using Lextm.SharpSnmpLib.Mib;
|
||||
using Lextm.SharpSnmpLib.Mib.Elements.Entities;
|
||||
using Lextm.SharpSnmpLib.Mib.Elements.Types;
|
||||
using LwipSnmpCodeGeneration;
|
||||
|
||||
namespace LwipMibCompiler
|
||||
{
|
||||
class Program
|
||||
{
|
||||
private static readonly Regex _alphaNumericRegex = new Regex("[^a-zA-Z0-9]");
|
||||
|
||||
static void Main(string[] args)
|
||||
{
|
||||
Console.WriteLine("lwIP MIB Compiler");
|
||||
Console.WriteLine("");
|
||||
|
||||
// check args
|
||||
if ((args.Length < 2) || String.IsNullOrWhiteSpace(args[0]) || String.IsNullOrWhiteSpace(args[1]))
|
||||
{
|
||||
PrintUsage();
|
||||
return;
|
||||
}
|
||||
|
||||
string mibFile = args[0];
|
||||
if (!File.Exists(mibFile))
|
||||
{
|
||||
Console.WriteLine(String.Format("Unable to find file '{0}'!", mibFile));
|
||||
}
|
||||
|
||||
string destFile = args[1];
|
||||
string destHeaderFile;
|
||||
|
||||
if (Directory.Exists(destFile))
|
||||
{
|
||||
// only directory passed -> create dest filename from mib filename
|
||||
string mibFileName = Path.GetFileNameWithoutExtension(mibFile).ToLowerInvariant();
|
||||
destFile = Path.Combine(destFile, mibFileName + ".c");
|
||||
}
|
||||
|
||||
string destFileExt = Path.GetExtension(destFile);
|
||||
if (!String.IsNullOrEmpty(destFileExt))
|
||||
{
|
||||
destHeaderFile = destFile.Substring(0, destFile.Length - destFileExt.Length);
|
||||
}
|
||||
else
|
||||
{
|
||||
destHeaderFile = destFile;
|
||||
}
|
||||
destHeaderFile += ".h";
|
||||
|
||||
for (int i=2; i<args.Length; i++)
|
||||
{
|
||||
if (!String.IsNullOrWhiteSpace(args[i]) && Directory.Exists(args[i]))
|
||||
{
|
||||
MibTypesResolver.RegisterResolver(new FileSystemMibResolver(args[i], true));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// read and resolve MIB
|
||||
Console.WriteLine(" Reading MIB file...");
|
||||
|
||||
MibDocument md = new MibDocument(mibFile);
|
||||
MibTypesResolver.ResolveTypes(md.Modules[0]);
|
||||
MibTree mt = new MibTree(md.Modules[0] as MibModule);
|
||||
|
||||
if (mt.Root.Count == 0)
|
||||
{
|
||||
Console.WriteLine("No root element found inside MIB!");
|
||||
return;
|
||||
}
|
||||
|
||||
MibCFile generatedFile = new MibCFile();
|
||||
MibHeaderFile generatedHeaderFile = new MibHeaderFile();
|
||||
|
||||
foreach (MibTreeNode mibTreeNode in mt.Root)
|
||||
{
|
||||
// create LWIP object tree from MIB structure
|
||||
Console.WriteLine(" Creating lwIP object tree " + mibTreeNode.Entity.Name);
|
||||
|
||||
SnmpMib snmpMib = new SnmpMib();
|
||||
snmpMib.Oid = mibTreeNode.Entity.Value;
|
||||
snmpMib.BaseOid = MibTypesResolver.ResolveOid(mibTreeNode.Entity).GetOidValues();
|
||||
snmpMib.Name = mibTreeNode.Entity.Name;
|
||||
|
||||
ProcessMibTreeNode(mibTreeNode, snmpMib);
|
||||
|
||||
// let the tree transform itself depending on node structure
|
||||
snmpMib.Analyze();
|
||||
|
||||
if (snmpMib.ChildNodes.Count != 0)
|
||||
{
|
||||
// generate code from LWIP object tree
|
||||
Console.WriteLine(" Generating code " + snmpMib.Name);
|
||||
snmpMib.Generate(generatedFile, generatedHeaderFile);
|
||||
}
|
||||
}
|
||||
|
||||
string preservedCode = MibCFile.GetPreservedCode(destFile);
|
||||
if (!string.IsNullOrEmpty(preservedCode))
|
||||
{
|
||||
generatedFile.PreservedCode.Add(new PlainText(preservedCode));
|
||||
}
|
||||
else
|
||||
{
|
||||
generatedFile.PreservedCode.AddRange(generatedFile.Implementation);
|
||||
}
|
||||
generatedFile.Implementation.Clear();
|
||||
|
||||
|
||||
using (StreamWriter fileWriter = new StreamWriter(destHeaderFile))
|
||||
{
|
||||
CGenerator cGenerator = new CGenerator(fileWriter, destHeaderFile, 3, " ", Environment.NewLine);
|
||||
generatedHeaderFile.Save(cGenerator);
|
||||
}
|
||||
using (StreamWriter fileWriter = new StreamWriter(destFile))
|
||||
{
|
||||
CGenerator cGenerator = new CGenerator(fileWriter, destFile, 3, " ", Environment.NewLine);
|
||||
generatedFile.Save(cGenerator);
|
||||
}
|
||||
|
||||
Console.WriteLine(" Done");
|
||||
}
|
||||
|
||||
private static void PrintUsage()
|
||||
{
|
||||
string codeBase = Assembly.GetExecutingAssembly().CodeBase;
|
||||
string appName = Path.GetFileName(codeBase);
|
||||
|
||||
Console.WriteLine("Usage:");
|
||||
Console.WriteLine(String.Format(" {0} <source MIB file> <dest C file> [<search path 1 for referred MIB's> <search path 2 for referred MIB's> ...]", appName));
|
||||
Console.WriteLine("");
|
||||
Console.WriteLine(" <source MIB file>");
|
||||
Console.WriteLine(" Path and filename of MIB file to convert.");
|
||||
Console.WriteLine("");
|
||||
Console.WriteLine(" <dest C file>");
|
||||
Console.WriteLine(" Destination path and file. If a path is passed only, filename is auto");
|
||||
Console.WriteLine(" generated from MIB file name.");
|
||||
Console.WriteLine("");
|
||||
Console.WriteLine(" <search path X for referred MIB's>");
|
||||
Console.WriteLine(" It's important to provide all referred MIB's in order to correctly ");
|
||||
Console.WriteLine(" resolve all used types.");
|
||||
Console.WriteLine("");
|
||||
}
|
||||
|
||||
|
||||
#region Generation of LWIP Object Tree
|
||||
|
||||
private static void ProcessMibTreeNode(MibTreeNode mibTreeNode, SnmpTreeNode assignedSnmpNode)
|
||||
{
|
||||
foreach (MibTreeNode mtn in mibTreeNode.ChildNodes)
|
||||
{
|
||||
// in theory container nodes may also be scalars or tables at the same time (for now only process real containers)
|
||||
if (mtn.NodeType == MibTreeNodeType.Container)
|
||||
{
|
||||
SnmpTreeNode snmpTreeNode = GenerateSnmpTreeNode(mtn, assignedSnmpNode);
|
||||
assignedSnmpNode.ChildNodes.Add(snmpTreeNode);
|
||||
|
||||
ProcessMibTreeNode(mtn, snmpTreeNode);
|
||||
}
|
||||
else if ((mtn.NodeType & MibTreeNodeType.Scalar) != 0)
|
||||
{
|
||||
SnmpScalarNode snmpScalarNode = GenerateSnmpScalarNode(mtn, assignedSnmpNode);
|
||||
if (snmpScalarNode != null)
|
||||
{
|
||||
assignedSnmpNode.ChildNodes.Add(snmpScalarNode);
|
||||
}
|
||||
}
|
||||
else if ((mtn.NodeType & MibTreeNodeType.Table) != 0)
|
||||
{
|
||||
SnmpTableNode snmpTableNode = GenerateSnmpTableNode(mtn, assignedSnmpNode);
|
||||
if (snmpTableNode != null)
|
||||
{
|
||||
assignedSnmpNode.ChildNodes.Add(snmpTableNode);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static SnmpTreeNode GenerateSnmpTreeNode(MibTreeNode mibTreeNode, SnmpTreeNode parentNode)
|
||||
{
|
||||
SnmpTreeNode result = new SnmpTreeNode(parentNode);
|
||||
result.Name = _alphaNumericRegex.Replace (mibTreeNode.Entity.Name, "");
|
||||
result.Oid = mibTreeNode.Entity.Value;
|
||||
result.FullOid = MibTypesResolver.ResolveOid(mibTreeNode.Entity).GetOidString();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static SnmpScalarNode GenerateSnmpScalarNode(MibTreeNode mibTreeNode, SnmpTreeNode parentNode, bool ignoreAccessibleFlag = false)
|
||||
{
|
||||
ObjectType ote = mibTreeNode.Entity as ObjectType;
|
||||
if (ote != null)
|
||||
{
|
||||
return GenerateSnmpScalarNode(ote, parentNode, ignoreAccessibleFlag);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static SnmpScalarNode GenerateSnmpScalarNode(ObjectType ote, SnmpTreeNode parentNode, bool ignoreAccessibleFlag = false)
|
||||
{
|
||||
SnmpScalarNode result;
|
||||
|
||||
ITypeAssignment mibType = ote.BaseType;
|
||||
IntegerType it = (mibType as IntegerType);
|
||||
if (it != null)
|
||||
{
|
||||
if (ote.ReferredType.Name == Symbol.TruthValue.ToString())
|
||||
{
|
||||
result = new SnmpScalarNodeTruthValue(parentNode);
|
||||
}
|
||||
else if ((it.Type == IntegerType.Types.Integer) || (it.Type == IntegerType.Types.Integer32))
|
||||
{
|
||||
result = new SnmpScalarNodeInt(parentNode);
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine(String.Format("Unsupported IntegerType '{0}'!", it.Type));
|
||||
return null;
|
||||
}
|
||||
if (it.IsEnumeration)
|
||||
{
|
||||
result.Restrictions.AddRange(CreateRestrictions(it.Enumeration));
|
||||
}
|
||||
else
|
||||
{
|
||||
result.Restrictions.AddRange(CreateRestrictions(it.Ranges));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
UnsignedType ut = (mibType as UnsignedType);
|
||||
if (ut != null)
|
||||
{
|
||||
if ((ut.Type == UnsignedType.Types.Unsigned32) ||
|
||||
(ut.Type == UnsignedType.Types.Gauge32))
|
||||
{
|
||||
result = new SnmpScalarNodeUint(SnmpDataType.Gauge, parentNode);
|
||||
}
|
||||
else if (ut.Type == UnsignedType.Types.Counter32)
|
||||
{
|
||||
result = new SnmpScalarNodeUint(SnmpDataType.Counter, parentNode);
|
||||
}
|
||||
else if (ut.Type == UnsignedType.Types.TimeTicks)
|
||||
{
|
||||
result = new SnmpScalarNodeUint(SnmpDataType.TimeTicks, parentNode);
|
||||
}
|
||||
else if (ut.Type == UnsignedType.Types.Counter64)
|
||||
{
|
||||
result = new SnmpScalarNodeCounter64(parentNode);
|
||||
if ((ut.Ranges != null) && (ut.Ranges.Count > 0))
|
||||
{
|
||||
Console.WriteLine(String.Format("Generation of ranges is not supported for Counter64 type!"));
|
||||
return null;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine(String.Format("Unsupported UnsignedType '{0}'!", ut.Type));
|
||||
return null;
|
||||
}
|
||||
result.Restrictions.AddRange(CreateRestrictions(ut.Ranges));
|
||||
}
|
||||
else if (mibType is IpAddressType)
|
||||
{
|
||||
result = new SnmpScalarNodeOctetString(SnmpDataType.IpAddress, parentNode);
|
||||
result.Restrictions.AddRange(CreateRestrictions((mibType as OctetStringType).Size));
|
||||
}
|
||||
else if (mibType is OpaqueType)
|
||||
{
|
||||
result = new SnmpScalarNodeOctetString(SnmpDataType.Opaque, parentNode);
|
||||
result.Restrictions.AddRange(CreateRestrictions((mibType as OctetStringType).Size));
|
||||
}
|
||||
else if (mibType is OctetStringType)
|
||||
{
|
||||
result = new SnmpScalarNodeOctetString(SnmpDataType.OctetString, parentNode);
|
||||
result.Restrictions.AddRange(CreateRestrictions((mibType as OctetStringType).Size));
|
||||
}
|
||||
else if (mibType is ObjectIdentifierType)
|
||||
{
|
||||
result = new SnmpScalarNodeObjectIdentifier(parentNode);
|
||||
}
|
||||
else if (mibType is BitsType)
|
||||
{
|
||||
result = new SnmpScalarNodeBits(parentNode, (uint)((mibType as BitsType).Map.GetHighestValue() + 1));
|
||||
result.Restrictions.AddRange(CreateRestrictions(mibType as BitsType));
|
||||
}
|
||||
else
|
||||
{
|
||||
TypeAssignment ta = mibType as TypeAssignment;
|
||||
if (ta != null)
|
||||
{
|
||||
Console.WriteLine(String.Format("Unsupported BaseType: Module='{0}', Name='{1}', Type='{2}'!", ta.Module.Name, ta.Name, ta.Type));
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine(String.Format("Unsupported BaseType: Module='{0}', Name='{1}'!", mibType.Module, mibType.Name));
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
result.Name = _alphaNumericRegex.Replace(ote.Name, "");
|
||||
result.Oid = ote.Value;
|
||||
|
||||
if (ote.Access == MaxAccess.readWrite)
|
||||
{
|
||||
result.AccessMode = SnmpAccessMode.ReadWrite;
|
||||
}
|
||||
else if (ote.Access == MaxAccess.readOnly)
|
||||
{
|
||||
result.AccessMode = SnmpAccessMode.ReadOnly;
|
||||
}
|
||||
else if (ote.Access == MaxAccess.readCreate)
|
||||
{
|
||||
result.AccessMode = SnmpAccessMode.ReadOnly;
|
||||
}
|
||||
else if (ignoreAccessibleFlag && (ote.Access == MaxAccess.notAccessible))
|
||||
{
|
||||
result.AccessMode = SnmpAccessMode.NotAccessible;
|
||||
}
|
||||
else
|
||||
{
|
||||
// not accessible or unsupported access type
|
||||
return null;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static IEnumerable<IRestriction> CreateRestrictions(ValueRanges ranges)
|
||||
{
|
||||
List<IRestriction> result = new List<IRestriction>();
|
||||
|
||||
if (ranges != null)
|
||||
{
|
||||
foreach (ValueRange range in ranges)
|
||||
{
|
||||
if (!range.End.HasValue)
|
||||
{
|
||||
result.Add(new IsEqualRestriction(range.Start));
|
||||
}
|
||||
else
|
||||
{
|
||||
result.Add(new IsInRangeRestriction(range.Start, range.End.Value));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static IEnumerable<IRestriction> CreateRestrictions(ValueMap map)
|
||||
{
|
||||
if ((map != null) && (map.Count > 0))
|
||||
{
|
||||
return CreateRestrictions(map.GetContinousRanges());
|
||||
}
|
||||
|
||||
return new List<IRestriction>();
|
||||
}
|
||||
|
||||
private static IEnumerable<IRestriction> CreateRestrictions(BitsType bt)
|
||||
{
|
||||
List<IRestriction> result = new List<IRestriction>();
|
||||
|
||||
if ((bt != null) && (bt.Map != null))
|
||||
{
|
||||
result.Add(new BitMaskRestriction(bt.Map.GetBitMask()));
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static SnmpTableNode GenerateSnmpTableNode(MibTreeNode mibTreeNode, SnmpTreeNode parentNode)
|
||||
{
|
||||
SnmpTableNode result = new SnmpTableNode(parentNode);
|
||||
result.Name = mibTreeNode.Entity.Name;
|
||||
result.Oid = mibTreeNode.Entity.Value;
|
||||
|
||||
// expect exactly one row entry
|
||||
if ((mibTreeNode.ChildNodes.Count != 1) || ((mibTreeNode.ChildNodes[0].NodeType & MibTreeNodeType.TableRow) == 0) || (mibTreeNode.ChildNodes[0].Entity.Value != 1))
|
||||
{
|
||||
Console.WriteLine("Found table with unsupported properties! Table needs exactly one (fixed) TableRow with OID=1 ! (" + mibTreeNode.Entity.Name + ")");
|
||||
return null;
|
||||
}
|
||||
|
||||
MibTreeNode rowNode = mibTreeNode.ChildNodes[0];
|
||||
|
||||
ObjectType rot = rowNode.Entity as ObjectType;
|
||||
if (rot != null)
|
||||
{
|
||||
if (!String.IsNullOrWhiteSpace(rot.Augments))
|
||||
{
|
||||
result.AugmentedTableRow = rot.Augments;
|
||||
|
||||
// the indices from another table shall be used because this table is only an extension of it
|
||||
rot = MibTypesResolver.ResolveDeclaration(rot.Module, rot.Augments) as ObjectType;
|
||||
}
|
||||
|
||||
if (rot.Indices != null)
|
||||
{
|
||||
foreach (string index in rot.Indices)
|
||||
{
|
||||
ObjectType indexEntity = MibTypesResolver.ResolveDeclaration(rot.Module, index) as ObjectType;
|
||||
if (indexEntity == null)
|
||||
{
|
||||
Console.WriteLine(String.Format("Could not resolve index '{0}' for table '{1}'! Table omitted!", index, result.Name));
|
||||
return null;
|
||||
}
|
||||
|
||||
result.IndexNodes.Add(GenerateSnmpScalarNode(indexEntity, parentNode, ignoreAccessibleFlag: true));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (result.IndexNodes.Count == 0)
|
||||
{
|
||||
// a table cannot be used without index
|
||||
Console.WriteLine("Found table without any index column ! (" + mibTreeNode.Entity.Name + ")");
|
||||
return null;
|
||||
}
|
||||
|
||||
// add child nodes
|
||||
foreach (MibTreeNode cellNode in rowNode.ChildNodes)
|
||||
{
|
||||
SnmpScalarNode ssn = GenerateSnmpScalarNode(cellNode, parentNode);
|
||||
if (ssn != null)
|
||||
{
|
||||
result.CellNodes.Add(ssn);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// Allgemeine Informationen über eine Assembly werden über die folgenden
|
||||
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
|
||||
// die mit einer Assembly verknüpft sind.
|
||||
[assembly: AssemblyTitle("ConsoleApplication28")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("ConsoleApplication28")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2015")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar
|
||||
// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von
|
||||
// COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
|
||||
[assembly: Guid("0abf7541-6a96-43cd-9e24-462e074b2c96")]
|
||||
|
||||
// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
|
||||
//
|
||||
// Hauptversion
|
||||
// Nebenversion
|
||||
// Buildnummer
|
||||
// Revision
|
||||
//
|
||||
// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
|
||||
// übernehmen, indem Sie "*" eingeben:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
3
contrib/apps/LwipMibCompiler/LwipMibCompiler/app.config
Normal file
3
contrib/apps/LwipMibCompiler/LwipMibCompiler/app.config
Normal file
@@ -0,0 +1,3 @@
|
||||
<?xml version="1.0"?>
|
||||
<configuration>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
|
||||
@@ -0,0 +1,120 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
|
||||
namespace LwipSnmpCodeGeneration
|
||||
{
|
||||
public interface IRestriction
|
||||
{
|
||||
string GetCheckCodeValid(string varNameToCheck);
|
||||
string GetCheckCodeInvalid(string varNameToCheck);
|
||||
}
|
||||
|
||||
public class BitMaskRestriction : IRestriction
|
||||
{
|
||||
UInt32 mask;
|
||||
|
||||
public BitMaskRestriction(UInt32 mask)
|
||||
{
|
||||
this.mask = mask;
|
||||
}
|
||||
|
||||
public string GetCheckCodeValid(string varNameToCheck)
|
||||
{
|
||||
return String.Format("(({0} & {1}) == {0})", varNameToCheck, this.mask);
|
||||
}
|
||||
|
||||
public string GetCheckCodeInvalid(string varNameToCheck)
|
||||
{
|
||||
return String.Format("(({0} & {1}) != {0})", varNameToCheck, this.mask);
|
||||
}
|
||||
}
|
||||
|
||||
public class IsEqualRestriction : IRestriction
|
||||
{
|
||||
private Int64 value;
|
||||
|
||||
public IsEqualRestriction(Int64 value)
|
||||
{
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public long Value
|
||||
{
|
||||
get { return value; }
|
||||
}
|
||||
|
||||
public string GetCheckCodeValid(string varNameToCheck)
|
||||
{
|
||||
return String.Format("({0} == {1})", varNameToCheck, this.value);
|
||||
}
|
||||
|
||||
public string GetCheckCodeInvalid(string varNameToCheck)
|
||||
{
|
||||
return String.Format("({0} != {1})", varNameToCheck, this.value);
|
||||
}
|
||||
}
|
||||
|
||||
public class IsInRangeRestriction : IRestriction
|
||||
{
|
||||
private Int64 rangeStart;
|
||||
private Int64 rangeEnd;
|
||||
|
||||
public IsInRangeRestriction(Int64 rangeStart, Int64 rangeEnd)
|
||||
{
|
||||
this.rangeStart = rangeStart;
|
||||
this.rangeEnd = rangeEnd;
|
||||
}
|
||||
|
||||
public long RangeStart
|
||||
{
|
||||
get { return this.rangeStart; }
|
||||
}
|
||||
|
||||
public long RangeEnd
|
||||
{
|
||||
get { return this.rangeEnd; }
|
||||
}
|
||||
|
||||
public string GetCheckCodeValid(string varNameToCheck)
|
||||
{
|
||||
return String.Format("(({0} >= {1}) && ({0} <= {2}))", varNameToCheck, this.rangeStart, this.rangeEnd);
|
||||
}
|
||||
|
||||
public string GetCheckCodeInvalid(string varNameToCheck)
|
||||
{
|
||||
return String.Format("(({0} < {1}) || ({0} > {2}))", varNameToCheck, this.rangeStart, this.rangeEnd);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
199
contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/LwipSnmp.cs
Normal file
199
contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/LwipSnmp.cs
Normal file
@@ -0,0 +1,199 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
|
||||
namespace LwipSnmpCodeGeneration
|
||||
{
|
||||
public static class LwipOpts
|
||||
{
|
||||
public static bool GenerateEmptyFolders = false;
|
||||
/// <summary>
|
||||
/// If a tree node only has scalar nodes as child nodes, it is replaced by
|
||||
/// a single scalar array node in order to save memory and have only one single get/test/set method for all scalars.
|
||||
/// </summary>
|
||||
public static bool GenerateScalarArrays = true;
|
||||
/// <summary>
|
||||
/// If a tree node has multiple scalars as subnodes as well as other treenodes it
|
||||
/// defines a single get/test/set method for all scalar child node.
|
||||
/// (without other treenodes as child it would have been converted to scalar array node).
|
||||
/// </summary>
|
||||
public static bool GenerateSingleAccessMethodsForTreeNodeScalars = GenerateScalarArrays;
|
||||
}
|
||||
|
||||
public static class LwipDefs
|
||||
{
|
||||
public const string Null = "NULL";
|
||||
public const string Vt_U8 = "u8_t";
|
||||
public const string Vt_U16 = "u16_t";
|
||||
public const string Vt_U32 = "u32_t";
|
||||
public const string Vt_S8 = "s8_t";
|
||||
public const string Vt_S16 = "s16_t";
|
||||
public const string Vt_S32 = "s32_t";
|
||||
public const string Vt_Snmp_err = "snmp_err_t";
|
||||
|
||||
public const string Incl_SnmpOpts = "lwip/apps/snmp_opts.h";
|
||||
public const string Opt_SnmpEnabled = "LWIP_SNMP";
|
||||
|
||||
public const string Vt_StMib = "struct snmp_mib";
|
||||
public const string Vt_StObjectId = "struct snmp_obj_id";
|
||||
public const string Vt_StNode = "struct snmp_node";
|
||||
public const string Vt_StNodeInstance = "struct snmp_node_instance";
|
||||
public const string Vt_StTreeNode = "struct snmp_tree_node";
|
||||
public const string Vt_StScalarNode = "struct snmp_scalar_node";
|
||||
public const string Vt_StScalarArrayNode = "struct snmp_scalar_array_node";
|
||||
public const string Vt_StScalarArrayNodeDef = "struct snmp_scalar_array_node_def";
|
||||
public const string Vt_StTableNode = "struct snmp_table_node";
|
||||
public const string Vt_StTableColumnDef = "struct snmp_table_col_def";
|
||||
public const string Vt_StNextOidState = "struct snmp_next_oid_state";
|
||||
|
||||
public const string Def_NodeAccessReadOnly = "SNMP_NODE_INSTANCE_READ_ONLY";
|
||||
public const string Def_NodeAccessReadWrite = "SNMP_NODE_INSTANCE_READ_WRITE";
|
||||
public const string Def_NodeAccessWriteOnly = "SNMP_NODE_INSTANCE_WRITE_ONLY";
|
||||
public const string Def_NodeAccessNotAccessible = "SNMP_NODE_INSTANCE_NOT_ACCESSIBLE";
|
||||
|
||||
public const string Def_ErrorCode_Ok = "SNMP_ERR_NOERROR";
|
||||
public const string Def_ErrorCode_WrongValue = "SNMP_ERR_WRONGVALUE";
|
||||
public const string Def_ErrorCode_NoSuchInstance = "SNMP_ERR_NOSUCHINSTANCE";
|
||||
|
||||
public const string FnctSuffix_GetValue = "_get_value";
|
||||
public const string FnctSuffix_SetTest = "_set_test";
|
||||
public const string FnctSuffix_SetValue = "_set_value";
|
||||
public const string FnctSuffix_GetInstance = "_get_instance";
|
||||
public const string FnctSuffix_GetNextInstance = "_get_next_instance";
|
||||
|
||||
public const string FnctName_SetTest_Ok = "snmp_set_test_ok";
|
||||
|
||||
public static string GetLwipDefForSnmpAccessMode(SnmpAccessMode am)
|
||||
{
|
||||
switch (am)
|
||||
{
|
||||
case SnmpAccessMode.ReadOnly: return Def_NodeAccessReadOnly;
|
||||
case SnmpAccessMode.ReadWrite: return Def_NodeAccessReadWrite;
|
||||
case SnmpAccessMode.NotAccessible: return Def_NodeAccessNotAccessible;
|
||||
case SnmpAccessMode.WriteOnly: return Def_NodeAccessWriteOnly;
|
||||
default: throw new NotSupportedException("Unknown SnmpAccessMode!");
|
||||
}
|
||||
}
|
||||
|
||||
public static string GetAsn1DefForSnmpDataType(SnmpDataType dt)
|
||||
{
|
||||
switch (dt)
|
||||
{
|
||||
// primitive
|
||||
case SnmpDataType.Null:
|
||||
return "SNMP_ASN1_TYPE_NULL";
|
||||
case SnmpDataType.Bits:
|
||||
case SnmpDataType.OctetString:
|
||||
return "SNMP_ASN1_TYPE_OCTET_STRING";
|
||||
case SnmpDataType.ObjectIdentifier:
|
||||
return "SNMP_ASN1_TYPE_OBJECT_ID";
|
||||
case SnmpDataType.Integer:
|
||||
return "SNMP_ASN1_TYPE_INTEGER";
|
||||
|
||||
// application
|
||||
case SnmpDataType.IpAddress:
|
||||
return "SNMP_ASN1_TYPE_IPADDR";
|
||||
case SnmpDataType.Counter:
|
||||
return "SNMP_ASN1_TYPE_COUNTER";
|
||||
case SnmpDataType.Gauge:
|
||||
return "SNMP_ASN1_TYPE_GAUGE";
|
||||
case SnmpDataType.TimeTicks:
|
||||
return "SNMP_ASN1_TYPE_TIMETICKS";
|
||||
case SnmpDataType.Opaque:
|
||||
return "SNMP_ASN1_TYPE_OPAQUE";
|
||||
case SnmpDataType.Counter64:
|
||||
return "SNMP_ASN1_TYPE_COUNTER64";
|
||||
default:
|
||||
throw new NotSupportedException("Unknown SnmpDataType!");
|
||||
}
|
||||
}
|
||||
|
||||
public static string GetLengthForSnmpDataType(SnmpDataType dt)
|
||||
{
|
||||
switch (dt)
|
||||
{
|
||||
case SnmpDataType.Null:
|
||||
return "0";
|
||||
|
||||
case SnmpDataType.Integer:
|
||||
case SnmpDataType.Counter:
|
||||
case SnmpDataType.IpAddress:
|
||||
case SnmpDataType.Gauge:
|
||||
case SnmpDataType.TimeTicks:
|
||||
return "4";
|
||||
|
||||
case SnmpDataType.Counter64:
|
||||
return "8";
|
||||
|
||||
case SnmpDataType.OctetString:
|
||||
case SnmpDataType.ObjectIdentifier:
|
||||
case SnmpDataType.Bits:
|
||||
case SnmpDataType.Opaque:
|
||||
return null;
|
||||
|
||||
default:
|
||||
throw new NotSupportedException("Unknown SnmpDataType!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public enum SnmpDataType
|
||||
{
|
||||
Null,
|
||||
|
||||
Integer, // INTEGER, Integer32
|
||||
|
||||
Counter, // Counter, Counter32
|
||||
Gauge, // Gauge, Gauge32, Unsigned32
|
||||
TimeTicks,
|
||||
|
||||
Counter64,
|
||||
|
||||
OctetString,
|
||||
Opaque,
|
||||
Bits,
|
||||
|
||||
ObjectIdentifier,
|
||||
|
||||
IpAddress,
|
||||
}
|
||||
|
||||
public enum SnmpAccessMode
|
||||
{
|
||||
ReadOnly,
|
||||
ReadWrite,
|
||||
WriteOnly,
|
||||
NotAccessible
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>8.0.30703</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{AABCAB90-1540-45D4-A159-14831A54E9A3}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>LwipSnmpCodeGeneration</RootNamespace>
|
||||
<AssemblyName>LwipSnmpCodeGeneration</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="IRestriction.cs" />
|
||||
<Compile Include="SnmpScalarNodeCounter64.cs" />
|
||||
<Compile Include="SnmpScalarNodeTruthValue.cs" />
|
||||
<Compile Include="SnmpScalarAggregationNode.cs" />
|
||||
<Compile Include="SnmpTableNode.cs" />
|
||||
<Compile Include="SnmpScalarArrayNode.cs" />
|
||||
<Compile Include="MibHeaderFile.cs" />
|
||||
<Compile Include="SnmpScalarNodeBits.cs" />
|
||||
<Compile Include="SnmpMib.cs" />
|
||||
<Compile Include="SnmpScalarNodeInt.cs" />
|
||||
<Compile Include="SnmpScalarNodeObjectIdentifier.cs" />
|
||||
<Compile Include="SnmpScalarNodeOctetString.cs" />
|
||||
<Compile Include="SnmpScalarNodeUint.cs" />
|
||||
<Compile Include="SnmpTreeNode.cs" />
|
||||
<Compile Include="LwipSnmp.cs" />
|
||||
<Compile Include="MibCFile.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="SnmpNode.cs" />
|
||||
<Compile Include="SnmpScalarNode.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\CCodeGeneration\CCodeGeneration.csproj">
|
||||
<Project>{7DA7C0AB-0982-4BF5-9324-F59A7A08D65B}</Project>
|
||||
<Name>CCodeGeneration</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
||||
196
contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/MibCFile.cs
Normal file
196
contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/MibCFile.cs
Normal file
@@ -0,0 +1,196 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System.Collections.Generic;
|
||||
using CCodeGeneration;
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace LwipSnmpCodeGeneration
|
||||
{
|
||||
public class MibCFile
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private const string PreservedSectionMarker = "LWIP MIB generator - preserved section begin";
|
||||
private const string PreservedSectionHeader =
|
||||
"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n" +
|
||||
PreservedSectionMarker + "\n" +
|
||||
"Code below is preserved on regeneration. Remove these comment lines to regenerate code.\n" +
|
||||
"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++";
|
||||
|
||||
private readonly List<CodeElement> includes = new List<CodeElement>();
|
||||
private readonly List<CodeElement> defines = new List<CodeElement>();
|
||||
private readonly List<CodeElement> declarations = new List<CodeElement>();
|
||||
private readonly List<CodeElement> implementation = new List<CodeElement>();
|
||||
private readonly List<CodeElement> preservedCode = new List<CodeElement>();
|
||||
|
||||
#endregion
|
||||
|
||||
public MibCFile()
|
||||
{
|
||||
}
|
||||
|
||||
#region Accessors
|
||||
|
||||
public List<CodeElement> Includes
|
||||
{
|
||||
get { return this.includes; }
|
||||
}
|
||||
|
||||
public List<CodeElement> Defines
|
||||
{
|
||||
get { return this.defines; }
|
||||
}
|
||||
|
||||
public List<CodeElement> Declarations
|
||||
{
|
||||
get { return this.declarations; }
|
||||
}
|
||||
|
||||
public List<CodeElement> Implementation
|
||||
{
|
||||
get { return this.implementation; }
|
||||
}
|
||||
|
||||
public List<CodeElement> PreservedCode
|
||||
{
|
||||
get { return this.preservedCode; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
public void Save(CGenerator cGenerator)
|
||||
{
|
||||
CFile cFile = new CFile();
|
||||
|
||||
cFile.AddElement(new Comment("Generated by LwipMibCompiler"));
|
||||
cFile.AddElement(EmptyLine.SingleLine);
|
||||
|
||||
cFile.AddElement(new PP_Include(LwipDefs.Incl_SnmpOpts));
|
||||
CodeContainerBase e = cFile.AddElement(new PP_If(LwipDefs.Opt_SnmpEnabled)) as CodeContainerBase;
|
||||
e.AddElement(EmptyLine.SingleLine);
|
||||
|
||||
// include header file
|
||||
string file = cGenerator.FileName;
|
||||
if (!String.IsNullOrWhiteSpace(file))
|
||||
{
|
||||
string ext = System.IO.Path.GetExtension(file);
|
||||
|
||||
string headerFile = !String.IsNullOrEmpty(ext) ? file.Substring(0, file.Length - ext.Length) : file;
|
||||
headerFile += ".h";
|
||||
|
||||
e.AddElement(new PP_Include(headerFile));
|
||||
}
|
||||
|
||||
// include common snmp files
|
||||
e.AddElement(new PP_Include("lwip/apps/snmp.h"));
|
||||
e.AddElement(new PP_Include("lwip/apps/snmp_core.h"));
|
||||
e.AddElement(new PP_Include("lwip/apps/snmp_scalar.h"));
|
||||
e.AddElement(new PP_Include("lwip/apps/snmp_table.h"));
|
||||
|
||||
if (this.includes.Count > 0)
|
||||
{
|
||||
e.AddElement(EmptyLine.SingleLine);
|
||||
e.AddElements(this.includes);
|
||||
}
|
||||
|
||||
if (this.defines.Count > 0)
|
||||
{
|
||||
e.AddElement(EmptyLine.SingleLine);
|
||||
e.AddElements(this.defines);
|
||||
}
|
||||
|
||||
if (this.declarations.Count > 0)
|
||||
{
|
||||
e.AddElement(EmptyLine.TwoLines);
|
||||
e.AddElements(this.declarations);
|
||||
}
|
||||
|
||||
if (this.implementation.Count > 0)
|
||||
{
|
||||
e.AddElement(EmptyLine.TwoLines);
|
||||
e.AddElements(this.implementation);
|
||||
}
|
||||
|
||||
if (this.preservedCode.Count > 0)
|
||||
{
|
||||
e.AddElement(EmptyLine.TwoLines);
|
||||
e.AddElement(new Comment(PreservedSectionHeader));
|
||||
e.AddElement(EmptyLine.SingleLine);
|
||||
e.AddElements(this.preservedCode);
|
||||
}
|
||||
|
||||
cFile.Save(cGenerator);
|
||||
}
|
||||
|
||||
public static string GetPreservedCode(string file)
|
||||
{
|
||||
if (File.Exists(file))
|
||||
{
|
||||
using (StreamReader fileStream = new StreamReader(file))
|
||||
{
|
||||
while (!fileStream.EndOfStream)
|
||||
{
|
||||
string line = fileStream.ReadLine();
|
||||
if (line == PreservedSectionMarker)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!fileStream.EndOfStream)
|
||||
{
|
||||
// skip the rest of the comment + spacer line
|
||||
fileStream.ReadLine(); // "Code below is preserved...
|
||||
fileStream.ReadLine(); // "+++++++++++++++++++++++...
|
||||
fileStream.ReadLine(); // */
|
||||
fileStream.ReadLine(); //
|
||||
|
||||
string preservedCode = fileStream.ReadToEnd();
|
||||
|
||||
int lastEndif = preservedCode.LastIndexOf("#endif", StringComparison.Ordinal);
|
||||
preservedCode = preservedCode.Remove(lastEndif);
|
||||
|
||||
return preservedCode;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Text.RegularExpressions;
|
||||
using CCodeGeneration;
|
||||
|
||||
namespace LwipSnmpCodeGeneration
|
||||
{
|
||||
public class MibHeaderFile
|
||||
{
|
||||
|
||||
#region Fields
|
||||
|
||||
private readonly List<CodeElement> defines = new List<CodeElement>();
|
||||
private readonly List<CodeElement> includes = new List<CodeElement>();
|
||||
private readonly List<CodeElement> functionDeclarations = new List<CodeElement>();
|
||||
private readonly List<CodeElement> variableDeclarations = new List<CodeElement>();
|
||||
|
||||
#endregion
|
||||
|
||||
public MibHeaderFile()
|
||||
{
|
||||
}
|
||||
|
||||
#region Accessors
|
||||
|
||||
public List<CodeElement> Defines
|
||||
{
|
||||
get { return this.defines; }
|
||||
}
|
||||
|
||||
public List<CodeElement> Includes
|
||||
{
|
||||
get { return this.includes; }
|
||||
}
|
||||
|
||||
public List<CodeElement> FunctionDeclarations
|
||||
{
|
||||
get { return this.functionDeclarations; }
|
||||
}
|
||||
|
||||
public List<CodeElement> VariableDeclarations
|
||||
{
|
||||
get { return this.variableDeclarations; }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
public void Save(CGenerator cGenerator)
|
||||
{
|
||||
CFile cFile = new CFile();
|
||||
|
||||
cFile.AddElement(new Comment("Generated by LwipMibCompiler"));
|
||||
cFile.AddElement(EmptyLine.SingleLine);
|
||||
|
||||
string headerDefine = cGenerator.FileName;
|
||||
headerDefine = new Regex("[^a-zA-Z0-9]").Replace(headerDefine, "_");
|
||||
headerDefine = headerDefine.ToUpperInvariant();
|
||||
|
||||
CodeContainerBase e = cFile.AddElement(new PP_Ifdef(headerDefine, inverted: true)) as CodeContainerBase;
|
||||
e.AddElement(new PP_Macro(headerDefine, headerDefine));
|
||||
e.AddElement(EmptyLine.SingleLine);
|
||||
|
||||
e.AddElement(new PP_Include(LwipDefs.Incl_SnmpOpts));
|
||||
e = e.AddElement(new PP_If(LwipDefs.Opt_SnmpEnabled)) as CodeContainerBase;
|
||||
e.AddElement(EmptyLine.SingleLine);
|
||||
|
||||
CodeContainerBase cplusplusopen = e.AddElement(new PP_Ifdef("__cplusplus")) as CodeContainerBase;
|
||||
cplusplusopen.AddElement(new Code("extern \"C\" {"));
|
||||
e.AddElement(EmptyLine.SingleLine);
|
||||
|
||||
if (this.includes.Count > 0)
|
||||
{
|
||||
e.AddElements(this.includes);
|
||||
e.AddElement(EmptyLine.SingleLine);
|
||||
}
|
||||
|
||||
if (this.defines.Count > 0)
|
||||
{
|
||||
e.AddElements(this.defines);
|
||||
e.AddElement(EmptyLine.SingleLine);
|
||||
}
|
||||
|
||||
e.AddElements(this.functionDeclarations, EmptyLine.SingleLine);
|
||||
e.AddElements(this.variableDeclarations, EmptyLine.SingleLine);
|
||||
|
||||
e.AddElement(EmptyLine.SingleLine);
|
||||
CodeContainerBase cplusplusclose = e.AddElement(new PP_Ifdef("__cplusplus")) as CodeContainerBase;
|
||||
cplusplusclose.AddElement(new Code("}"));
|
||||
|
||||
e.AddElement(EmptyLine.SingleLine);
|
||||
cFile.Save(cGenerator);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// Allgemeine Informationen über eine Assembly werden über die folgenden
|
||||
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
|
||||
// die mit einer Assembly verknüpft sind.
|
||||
[assembly: AssemblyTitle("LwipSnmpCodeGeneration")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("LwipSnmpCodeGeneration")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2015")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar
|
||||
// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von
|
||||
// COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
|
||||
[assembly: Guid("8cfbbb8b-dfbb-4dd5-80c9-e07845dd58c9")]
|
||||
|
||||
// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
|
||||
//
|
||||
// Hauptversion
|
||||
// Nebenversion
|
||||
// Buildnummer
|
||||
// Revision
|
||||
//
|
||||
// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
|
||||
// übernehmen, indem Sie "*" eingeben:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
@@ -0,0 +1,97 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Text;
|
||||
using CCodeGeneration;
|
||||
|
||||
namespace LwipSnmpCodeGeneration
|
||||
{
|
||||
public class SnmpMib : SnmpTreeNode
|
||||
{
|
||||
public uint[] BaseOid { get; set; }
|
||||
|
||||
public SnmpMib()
|
||||
: base(null)
|
||||
{
|
||||
}
|
||||
|
||||
public SnmpMib(uint[] baseOid)
|
||||
: base(null)
|
||||
{
|
||||
this.BaseOid = baseOid;
|
||||
}
|
||||
|
||||
public override string FullNodeName
|
||||
{
|
||||
get { return this.Name.ToLowerInvariant() + "_root"; }
|
||||
}
|
||||
|
||||
public override void GenerateCode(MibCFile mibFile)
|
||||
{
|
||||
base.GenerateCode(mibFile);
|
||||
|
||||
System.Diagnostics.Debug.Assert((this.BaseOid != null) && (this.BaseOid.Length > 0));
|
||||
|
||||
// create and add BaseOID declarations
|
||||
StringBuilder boidInitialization = new StringBuilder("{");
|
||||
foreach (uint t in this.BaseOid)
|
||||
{
|
||||
boidInitialization.Append(t);
|
||||
boidInitialization.Append(",");
|
||||
}
|
||||
boidInitialization.Length -= 1;
|
||||
boidInitialization.Append("}");
|
||||
|
||||
VariableDeclaration boidDecl = new VariableDeclaration(
|
||||
new VariableType(this.Name.ToLowerInvariant() + "_base_oid", LwipDefs.Vt_U32, null, ConstType.Value, String.Empty),
|
||||
boidInitialization.ToString(), true);
|
||||
|
||||
mibFile.Declarations.Add(boidDecl);
|
||||
mibFile.Declarations.Add(GetExportDeclaration());
|
||||
}
|
||||
|
||||
public override void GenerateHeaderCode(MibHeaderFile mibHeaderFile)
|
||||
{
|
||||
mibHeaderFile.Includes.Add(new PP_Include("lwip/apps/snmp_core.h"));
|
||||
|
||||
mibHeaderFile.VariableDeclarations.Add(VariablePrototype.FromVariableDeclaration(GetExportDeclaration()));
|
||||
}
|
||||
|
||||
VariableDeclaration GetExportDeclaration()
|
||||
{
|
||||
return new VariableDeclaration(
|
||||
new VariableType(this.Name.ToLowerInvariant(), LwipDefs.Vt_StMib, null, ConstType.Value),
|
||||
String.Format("{{{0}_base_oid, LWIP_ARRAYSIZE({0}_base_oid), &{1}.node}}", this.Name.ToLowerInvariant(), this.FullNodeName));
|
||||
}
|
||||
}
|
||||
}
|
||||
119
contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/SnmpNode.cs
Normal file
119
contrib/apps/LwipMibCompiler/LwipSnmpCodeGeneration/SnmpNode.cs
Normal file
@@ -0,0 +1,119 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Text.RegularExpressions;
|
||||
using CCodeGeneration;
|
||||
|
||||
namespace LwipSnmpCodeGeneration
|
||||
{
|
||||
public abstract class SnmpNode
|
||||
{
|
||||
public static readonly Regex NameValidationRegex = new Regex(@"^\w+$");
|
||||
|
||||
private string name;
|
||||
private readonly SnmpTreeNode parentNode;
|
||||
|
||||
protected SnmpNode(SnmpTreeNode parentNode)
|
||||
{
|
||||
this.parentNode = parentNode;
|
||||
}
|
||||
|
||||
public SnmpTreeNode ParentNode
|
||||
{
|
||||
get { return this.parentNode; }
|
||||
}
|
||||
|
||||
public virtual uint Oid { get; set; }
|
||||
|
||||
public abstract string FullNodeName
|
||||
{
|
||||
get;
|
||||
}
|
||||
|
||||
public virtual string Name
|
||||
{
|
||||
get { return this.name; }
|
||||
set
|
||||
{
|
||||
if (value != this.name)
|
||||
{
|
||||
// check for valid name
|
||||
if (!NameValidationRegex.IsMatch(value))
|
||||
{
|
||||
throw new ArgumentOutOfRangeException("Name");
|
||||
}
|
||||
|
||||
this.name = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void Generate(MibCFile generatedFile, MibHeaderFile generatedHeaderFile)
|
||||
{
|
||||
int declCount = generatedFile.Declarations.Count;
|
||||
int implCount = generatedFile.Implementation.Count;
|
||||
|
||||
this.GenerateHeaderCode(generatedHeaderFile);
|
||||
this.GenerateCode(generatedFile);
|
||||
|
||||
if (generatedFile.Declarations.Count != declCount)
|
||||
{
|
||||
generatedFile.Declarations.Add(EmptyLine.SingleLine);
|
||||
}
|
||||
if (generatedFile.Implementation.Count != implCount)
|
||||
{
|
||||
generatedFile.Implementation.Add(EmptyLine.SingleLine);
|
||||
}
|
||||
}
|
||||
|
||||
public abstract void GenerateCode(MibCFile mibFile);
|
||||
|
||||
public virtual void GenerateHeaderCode(MibHeaderFile mibHeaderFile)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called after node structure creation is completed and before code is created.
|
||||
/// Offers the possibility to perform operations depending on properties/subnodes.
|
||||
/// If the node shall be transformed to another node(-type) than the own instance
|
||||
/// may be replaced on parent node by the transformed instance.
|
||||
/// Calling sequence is always from leafs up to root. So a tree node can assume
|
||||
/// that the analyze method was already called on all child nodes.
|
||||
/// E.g. a tree node only has scalar sub nodes -> it transforms itself to a scalar array node
|
||||
/// </summary>
|
||||
/// <returns>The transformed node or null if nothing shall be changed in parent structure.</returns>
|
||||
public virtual void Analyze()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,293 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using CCodeGeneration;
|
||||
|
||||
namespace LwipSnmpCodeGeneration
|
||||
{
|
||||
public abstract class SnmpScalarAggregationNode: SnmpNode
|
||||
{
|
||||
private bool getMethodRequired = false;
|
||||
private bool testMethodRequired = false;
|
||||
private bool setMethodRequired = false;
|
||||
|
||||
protected SnmpScalarAggregationNode(SnmpTreeNode parentNode)
|
||||
: base(parentNode)
|
||||
{
|
||||
}
|
||||
|
||||
protected virtual string GetMethodName
|
||||
{
|
||||
get { return this.FullNodeName + LwipDefs.FnctSuffix_GetValue; }
|
||||
}
|
||||
|
||||
protected bool GetMethodRequired
|
||||
{
|
||||
get { return this.getMethodRequired; }
|
||||
}
|
||||
|
||||
protected virtual string TestMethodName
|
||||
{
|
||||
get { return this.FullNodeName + LwipDefs.FnctSuffix_SetTest; }
|
||||
}
|
||||
|
||||
protected bool TestMethodRequired
|
||||
{
|
||||
get { return this.testMethodRequired; }
|
||||
}
|
||||
|
||||
protected virtual string SetMethodName
|
||||
{
|
||||
get { return this.FullNodeName + LwipDefs.FnctSuffix_SetValue; }
|
||||
}
|
||||
|
||||
protected bool SetMethodRequired
|
||||
{
|
||||
get { return this.setMethodRequired; }
|
||||
}
|
||||
|
||||
protected abstract IEnumerable<SnmpScalarNode> AggregatedScalarNodes
|
||||
{
|
||||
get;
|
||||
}
|
||||
|
||||
public override void Analyze()
|
||||
{
|
||||
base.Analyze();
|
||||
|
||||
this.getMethodRequired = false;
|
||||
this.testMethodRequired = false;
|
||||
this.setMethodRequired = false;
|
||||
|
||||
foreach (SnmpScalarNode scalarNode in this.AggregatedScalarNodes)
|
||||
{
|
||||
if ((scalarNode.AccessMode == SnmpAccessMode.ReadOnly) || (scalarNode.AccessMode == SnmpAccessMode.ReadWrite))
|
||||
{
|
||||
this.getMethodRequired = true;
|
||||
}
|
||||
if ((scalarNode.AccessMode == SnmpAccessMode.WriteOnly) || (scalarNode.AccessMode == SnmpAccessMode.ReadWrite))
|
||||
{
|
||||
this.testMethodRequired = true;
|
||||
this.setMethodRequired = true;
|
||||
}
|
||||
|
||||
if (this.getMethodRequired && this.setMethodRequired)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void GenerateAggregatedCode(MibCFile mibFile, VariableType instanceType, string switchSelector, bool generateDeclarations = true, bool generateImplementations = true)
|
||||
{
|
||||
if (this.getMethodRequired)
|
||||
{
|
||||
FunctionDeclaration getMethodDecl = new FunctionDeclaration(this.GetMethodName, isStatic: true);
|
||||
getMethodDecl.Parameter.Add(instanceType);
|
||||
getMethodDecl.Parameter.Add(new VariableType("value", VariableType.VoidString, "*"));
|
||||
getMethodDecl.ReturnType = new VariableType(null, LwipDefs.Vt_S16);
|
||||
|
||||
if (generateDeclarations)
|
||||
{
|
||||
mibFile.Declarations.Add(getMethodDecl);
|
||||
}
|
||||
if (generateImplementations)
|
||||
{
|
||||
Function getMethod = Function.FromDeclaration(getMethodDecl);
|
||||
GenerateGetMethodCode(getMethod, switchSelector);
|
||||
mibFile.Implementation.Add(getMethod);
|
||||
}
|
||||
}
|
||||
|
||||
if (this.testMethodRequired)
|
||||
{
|
||||
FunctionDeclaration testMethodDecl = new FunctionDeclaration(this.TestMethodName, isStatic: true);
|
||||
testMethodDecl.Parameter.Add(instanceType);
|
||||
testMethodDecl.Parameter.Add(new VariableType("len", LwipDefs.Vt_U16));
|
||||
testMethodDecl.Parameter.Add(new VariableType("value", VariableType.VoidString, "*"));
|
||||
testMethodDecl.ReturnType = new VariableType(null, LwipDefs.Vt_Snmp_err);
|
||||
|
||||
if (generateDeclarations)
|
||||
{
|
||||
mibFile.Declarations.Add(testMethodDecl);
|
||||
}
|
||||
if (generateImplementations)
|
||||
{
|
||||
Function testMethod = Function.FromDeclaration(testMethodDecl);
|
||||
GenerateTestMethodCode(testMethod, switchSelector);
|
||||
mibFile.Implementation.Add(testMethod);
|
||||
}
|
||||
}
|
||||
|
||||
if (this.setMethodRequired)
|
||||
{
|
||||
FunctionDeclaration setMethodDecl = new FunctionDeclaration(this.SetMethodName, isStatic: true);
|
||||
setMethodDecl.Parameter.Add(instanceType);
|
||||
setMethodDecl.Parameter.Add(new VariableType("len", LwipDefs.Vt_U16));
|
||||
setMethodDecl.Parameter.Add(new VariableType("value", VariableType.VoidString, "*"));
|
||||
setMethodDecl.ReturnType = new VariableType(null, LwipDefs.Vt_Snmp_err);
|
||||
|
||||
if (generateDeclarations)
|
||||
{
|
||||
mibFile.Declarations.Add(setMethodDecl);
|
||||
}
|
||||
if (generateImplementations)
|
||||
{
|
||||
Function setMethod = Function.FromDeclaration(setMethodDecl);
|
||||
GenerateSetMethodCode(setMethod, switchSelector);
|
||||
mibFile.Implementation.Add(setMethod);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void GenerateGetMethodCode(Function getMethod, string switchSelector)
|
||||
{
|
||||
VariableDeclaration returnValue = new VariableDeclaration((VariableType)getMethod.ReturnType.Clone());
|
||||
returnValue.Type.Name = "value_len";
|
||||
getMethod.Declarations.Add(returnValue);
|
||||
Switch sw = new Switch(switchSelector);
|
||||
|
||||
bool valueVarUsed = false;
|
||||
|
||||
foreach (SnmpScalarNode scalarNode in this.AggregatedScalarNodes)
|
||||
{
|
||||
if ((scalarNode.AccessMode == SnmpAccessMode.ReadOnly) || (scalarNode.AccessMode == SnmpAccessMode.ReadWrite))
|
||||
{
|
||||
SwitchCase sc = new SwitchCase(scalarNode.Oid.ToString(CultureInfo.InvariantCulture));
|
||||
sc.Declarations.Add(new Comment(scalarNode.Name, singleLine: true));
|
||||
|
||||
scalarNode.GenerateGetMethodCode(sc, getMethod.Parameter[1].Name, ref valueVarUsed, returnValue.Type.Name);
|
||||
|
||||
sw.Switches.Add(sc);
|
||||
}
|
||||
}
|
||||
|
||||
SwitchCase scd = SwitchCase.GenerateDefault();
|
||||
scd.AddCodeFormat("LWIP_DEBUGF(SNMP_MIB_DEBUG,(\"{0}(): unknown id: %\"S32_F\"\\n\", {1}));", getMethod.Name, switchSelector);
|
||||
scd.AddCodeFormat("{0} = 0;", returnValue.Type.Name);
|
||||
sw.Switches.Add(scd);
|
||||
|
||||
if (!valueVarUsed)
|
||||
{
|
||||
getMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", getMethod.Parameter[1].Name);
|
||||
}
|
||||
|
||||
getMethod.AddElement(sw);
|
||||
|
||||
getMethod.AddCodeFormat("return {0};", returnValue.Type.Name);
|
||||
}
|
||||
|
||||
protected virtual void GenerateTestMethodCode(Function testMethod, string switchSelector)
|
||||
{
|
||||
VariableDeclaration returnValue = new VariableDeclaration((VariableType)testMethod.ReturnType.Clone(), LwipDefs.Def_ErrorCode_WrongValue);
|
||||
returnValue.Type.Name = "err";
|
||||
testMethod.Declarations.Add(returnValue);
|
||||
Switch sw = new Switch(switchSelector);
|
||||
|
||||
bool valueVarUsed = false;
|
||||
bool lenVarUsed = false;
|
||||
|
||||
foreach (SnmpScalarNode scalarNode in this.AggregatedScalarNodes)
|
||||
{
|
||||
if ((scalarNode.AccessMode == SnmpAccessMode.WriteOnly) || (scalarNode.AccessMode == SnmpAccessMode.ReadWrite))
|
||||
{
|
||||
SwitchCase sc = new SwitchCase(scalarNode.Oid.ToString(CultureInfo.InvariantCulture));
|
||||
sc.Declarations.Add(new Comment(scalarNode.Name, singleLine: true));
|
||||
|
||||
scalarNode.GenerateTestMethodCode(sc, testMethod.Parameter[2].Name, ref valueVarUsed, testMethod.Parameter[1].Name, ref lenVarUsed, returnValue.Type.Name);
|
||||
|
||||
sw.Switches.Add(sc);
|
||||
}
|
||||
}
|
||||
|
||||
SwitchCase scd = SwitchCase.GenerateDefault();
|
||||
scd.AddCodeFormat("LWIP_DEBUGF(SNMP_MIB_DEBUG,(\"{0}(): unknown id: %\"S32_F\"\\n\", {1}));", testMethod.Name, switchSelector);
|
||||
sw.Switches.Add(scd);
|
||||
|
||||
if (!valueVarUsed)
|
||||
{
|
||||
testMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", testMethod.Parameter[2].Name);
|
||||
}
|
||||
if (!lenVarUsed)
|
||||
{
|
||||
testMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", testMethod.Parameter[1].Name);
|
||||
}
|
||||
|
||||
testMethod.AddElement(sw);
|
||||
|
||||
testMethod.AddCodeFormat("return {0};", returnValue.Type.Name);
|
||||
}
|
||||
|
||||
protected virtual void GenerateSetMethodCode(Function setMethod, string switchSelector)
|
||||
{
|
||||
VariableDeclaration returnValue = new VariableDeclaration((VariableType)setMethod.ReturnType.Clone(), LwipDefs.Def_ErrorCode_Ok);
|
||||
returnValue.Type.Name = "err";
|
||||
setMethod.Declarations.Add(returnValue);
|
||||
Switch sw = new Switch(switchSelector);
|
||||
|
||||
bool valueVarUsed = false;
|
||||
bool lenVarUsed = false;
|
||||
|
||||
foreach (SnmpScalarNode scalarNode in this.AggregatedScalarNodes)
|
||||
{
|
||||
if ((scalarNode.AccessMode == SnmpAccessMode.WriteOnly) || (scalarNode.AccessMode == SnmpAccessMode.ReadWrite))
|
||||
{
|
||||
SwitchCase sc = new SwitchCase(scalarNode.Oid.ToString(CultureInfo.InvariantCulture));
|
||||
sc.Declarations.Add(new Comment(scalarNode.Name, singleLine: true));
|
||||
|
||||
scalarNode.GenerateSetMethodCode(sc, setMethod.Parameter[2].Name, ref valueVarUsed, setMethod.Parameter[1].Name, ref lenVarUsed, returnValue.Type.Name);
|
||||
|
||||
sw.Switches.Add(sc);
|
||||
}
|
||||
}
|
||||
|
||||
SwitchCase scd = SwitchCase.GenerateDefault();
|
||||
scd.AddCodeFormat("LWIP_DEBUGF(SNMP_MIB_DEBUG,(\"{0}(): unknown id: %\"S32_F\"\\n\", {1}));", setMethod.Name, switchSelector);
|
||||
sw.Switches.Add(scd);
|
||||
|
||||
if (!valueVarUsed)
|
||||
{
|
||||
setMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", setMethod.Parameter[2].Name);
|
||||
}
|
||||
if (!lenVarUsed)
|
||||
{
|
||||
setMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", setMethod.Parameter[1].Name);
|
||||
}
|
||||
|
||||
setMethod.AddElement(sw);
|
||||
|
||||
setMethod.AddCodeFormat("return {0};", returnValue.Type.Name);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,105 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using CCodeGeneration;
|
||||
|
||||
namespace LwipSnmpCodeGeneration
|
||||
{
|
||||
public class SnmpScalarArrayNode : SnmpScalarAggregationNode
|
||||
{
|
||||
private readonly List<SnmpScalarNode> scalarNodes;
|
||||
|
||||
public SnmpScalarArrayNode(List<SnmpScalarNode> scalarNodes, SnmpTreeNode parentNode)
|
||||
: base(parentNode)
|
||||
{
|
||||
this.scalarNodes = scalarNodes;
|
||||
}
|
||||
|
||||
public override string FullNodeName
|
||||
{
|
||||
get { return this.Name.ToLowerInvariant() + "_scalars"; }
|
||||
}
|
||||
|
||||
protected override IEnumerable<SnmpScalarNode> AggregatedScalarNodes
|
||||
{
|
||||
get { return this.scalarNodes; }
|
||||
}
|
||||
|
||||
public override void GenerateCode(MibCFile mibFile)
|
||||
{
|
||||
VariableType instanceType = new VariableType("node", LwipDefs.Vt_StScalarArrayNodeDef, "*", ConstType.Value);
|
||||
GenerateAggregatedCode(
|
||||
mibFile,
|
||||
instanceType,
|
||||
instanceType.Name + "->oid");
|
||||
|
||||
|
||||
// create and add node definitions
|
||||
StringBuilder nodeDefs = new StringBuilder();
|
||||
foreach (SnmpScalarNode scalarNode in this.scalarNodes)
|
||||
{
|
||||
nodeDefs.AppendFormat(" {{{0}, {1}, {2}}}, /* {3} */ \n",
|
||||
scalarNode.Oid,
|
||||
LwipDefs.GetAsn1DefForSnmpDataType(scalarNode.DataType),
|
||||
LwipDefs.GetLwipDefForSnmpAccessMode(scalarNode.AccessMode),
|
||||
scalarNode.Name);
|
||||
}
|
||||
if (nodeDefs.Length > 0)
|
||||
nodeDefs.Length--;
|
||||
|
||||
VariableDeclaration nodeDefsDecl = new VariableDeclaration(
|
||||
new VariableType(this.FullNodeName + "_nodes", LwipDefs.Vt_StScalarArrayNodeDef, null, ConstType.Value, String.Empty),
|
||||
"{\n" + nodeDefs + "\n}" ,
|
||||
isStatic: true);
|
||||
|
||||
mibFile.Declarations.Add(nodeDefsDecl);
|
||||
|
||||
|
||||
// create and add node declaration
|
||||
string nodeInitialization = String.Format("SNMP_SCALAR_CREATE_ARRAY_NODE({0}, {1}, {2}, {3}, {4})",
|
||||
this.Oid,
|
||||
nodeDefsDecl.Type.Name,
|
||||
(this.GetMethodRequired) ? this.GetMethodName : LwipDefs.Null,
|
||||
(this.TestMethodRequired) ? this.TestMethodName : LwipDefs.Null,
|
||||
(this.SetMethodRequired) ? this.SetMethodName : LwipDefs.Null
|
||||
);
|
||||
|
||||
mibFile.Declarations.Add(new VariableDeclaration(
|
||||
new VariableType(this.FullNodeName, LwipDefs.Vt_StScalarArrayNode, null, ConstType.Value),
|
||||
nodeInitialization,
|
||||
isStatic: true));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,395 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using CCodeGeneration;
|
||||
|
||||
namespace LwipSnmpCodeGeneration
|
||||
{
|
||||
public class SnmpScalarNode: SnmpNode
|
||||
{
|
||||
protected const string LocalValueName = "v"; // name of (casted) local value variable
|
||||
|
||||
private SnmpDataType dataType;
|
||||
private SnmpAccessMode accessMode;
|
||||
private readonly List<IRestriction> restrictions = new List<IRestriction>();
|
||||
|
||||
private bool useExternalMethods = false;
|
||||
private string externalGetMethod;
|
||||
private string externalTestMethod;
|
||||
private string externalSetMethod;
|
||||
|
||||
|
||||
public SnmpScalarNode(SnmpTreeNode parentNode)
|
||||
: base(parentNode)
|
||||
{
|
||||
}
|
||||
|
||||
public override string FullNodeName
|
||||
{
|
||||
get { return this.Name.ToLowerInvariant() + "_scalar"; }
|
||||
}
|
||||
|
||||
public SnmpDataType DataType
|
||||
{
|
||||
get { return this.dataType; }
|
||||
set { this.dataType = value; }
|
||||
}
|
||||
|
||||
public List<IRestriction> Restrictions
|
||||
{
|
||||
get { return this.restrictions; }
|
||||
}
|
||||
|
||||
public SnmpAccessMode AccessMode
|
||||
{
|
||||
get { return this.accessMode; }
|
||||
set { this.accessMode = value; }
|
||||
}
|
||||
|
||||
public virtual string FixedValueLength
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// If scalar is used as a table index its value becomes part of the OID. This value returns how many OID parts are required to represent this value.
|
||||
/// </summary>
|
||||
public virtual int OidRepresentationLen
|
||||
{
|
||||
get { return -1; }
|
||||
}
|
||||
|
||||
public bool UseExternalMethods
|
||||
{
|
||||
get { return this.useExternalMethods; }
|
||||
set { this.useExternalMethods = value; }
|
||||
}
|
||||
|
||||
public string ExternalGetMethod
|
||||
{
|
||||
get { return this.externalGetMethod; }
|
||||
set { this.externalGetMethod = value; }
|
||||
}
|
||||
public string ExternalTestMethod
|
||||
{
|
||||
get { return this.externalTestMethod; }
|
||||
set { this.externalTestMethod = value; }
|
||||
}
|
||||
public string ExternalSetMethod
|
||||
{
|
||||
get { return this.externalSetMethod; }
|
||||
set { this.externalSetMethod = value; }
|
||||
}
|
||||
|
||||
public override void GenerateCode(MibCFile mibFile)
|
||||
{
|
||||
string getMethodName;
|
||||
string testMethodName;
|
||||
string setMethodName;
|
||||
|
||||
if (this.useExternalMethods)
|
||||
{
|
||||
getMethodName = this.externalGetMethod;
|
||||
testMethodName = this.externalTestMethod;
|
||||
setMethodName = this.externalSetMethod;
|
||||
}
|
||||
else
|
||||
{
|
||||
getMethodName = LwipDefs.Null;
|
||||
testMethodName = LwipDefs.Null;
|
||||
setMethodName = LwipDefs.Null;
|
||||
|
||||
if ((this.accessMode == SnmpAccessMode.ReadWrite) || (this.accessMode == SnmpAccessMode.ReadOnly))
|
||||
{
|
||||
FunctionDeclaration getMethodDecl = new FunctionDeclaration(this.Name + LwipDefs.FnctSuffix_GetValue, isStatic: true);
|
||||
getMethodDecl.Parameter.Add(new VariableType("instance", LwipDefs.Vt_StNodeInstance, "*"));
|
||||
getMethodDecl.Parameter.Add(new VariableType("value", VariableType.VoidString, "*"));
|
||||
getMethodDecl.ReturnType = new VariableType(null, LwipDefs.Vt_S16);
|
||||
mibFile.Declarations.Add(getMethodDecl);
|
||||
|
||||
Function getMethod = Function.FromDeclaration(getMethodDecl);
|
||||
getMethodName = getMethod.Name;
|
||||
|
||||
VariableDeclaration returnValue = new VariableDeclaration((VariableType)getMethod.ReturnType.Clone());
|
||||
returnValue.Type.Name = "value_len";
|
||||
getMethod.Declarations.Add(returnValue);
|
||||
getMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", getMethod.Parameter[0].Name);
|
||||
|
||||
bool valueVarUsed = false;
|
||||
GenerateGetMethodCode(getMethod, getMethod.Parameter[1].Name, ref valueVarUsed, returnValue.Type.Name);
|
||||
if (!valueVarUsed)
|
||||
{
|
||||
getMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", getMethod.Parameter[1].Name);
|
||||
}
|
||||
|
||||
getMethod.AddCodeFormat("return {0};", returnValue.Type.Name);
|
||||
|
||||
mibFile.Implementation.Add(getMethod);
|
||||
}
|
||||
|
||||
if ((this.accessMode == SnmpAccessMode.ReadWrite) || (this.accessMode == SnmpAccessMode.WriteOnly))
|
||||
{
|
||||
bool valueVarUsed;
|
||||
bool lenVarUsed;
|
||||
VariableDeclaration returnValue;
|
||||
|
||||
if (this.restrictions.Count > 0)
|
||||
{
|
||||
FunctionDeclaration testMethodDecl = new FunctionDeclaration(this.Name + LwipDefs.FnctSuffix_SetTest, isStatic: true);
|
||||
testMethodDecl.Parameter.Add(new VariableType("instance", LwipDefs.Vt_StNodeInstance, "*"));
|
||||
testMethodDecl.Parameter.Add(new VariableType("len", LwipDefs.Vt_U16));
|
||||
testMethodDecl.Parameter.Add(new VariableType("value", VariableType.VoidString, "*"));
|
||||
testMethodDecl.ReturnType = new VariableType(null, LwipDefs.Vt_Snmp_err);
|
||||
mibFile.Declarations.Add(testMethodDecl);
|
||||
|
||||
Function testMethod = Function.FromDeclaration(testMethodDecl);
|
||||
testMethodName = testMethod.Name;
|
||||
|
||||
returnValue = new VariableDeclaration((VariableType)testMethod.ReturnType.Clone(), LwipDefs.Def_ErrorCode_WrongValue);
|
||||
returnValue.Type.Name = "err";
|
||||
testMethod.Declarations.Add(returnValue);
|
||||
testMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", testMethod.Parameter[0].Name);
|
||||
|
||||
valueVarUsed = false;
|
||||
lenVarUsed = false;
|
||||
|
||||
GenerateTestMethodCode(testMethod, testMethod.Parameter[2].Name, ref valueVarUsed, testMethod.Parameter[1].Name, ref lenVarUsed, returnValue.Type.Name);
|
||||
|
||||
if (!valueVarUsed)
|
||||
{
|
||||
testMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", testMethod.Parameter[2].Name);
|
||||
}
|
||||
if (!lenVarUsed)
|
||||
{
|
||||
testMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", testMethod.Parameter[1].Name);
|
||||
}
|
||||
|
||||
testMethod.AddCodeFormat("return {0};", returnValue.Type.Name);
|
||||
|
||||
mibFile.Implementation.Add(testMethod);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
testMethodName = LwipDefs.FnctName_SetTest_Ok;
|
||||
}
|
||||
|
||||
FunctionDeclaration setMethodDecl = null;
|
||||
setMethodDecl = new FunctionDeclaration(this.Name + LwipDefs.FnctSuffix_SetValue, isStatic: true);
|
||||
setMethodDecl.Parameter.Add(new VariableType("instance", LwipDefs.Vt_StNodeInstance, "*"));
|
||||
setMethodDecl.Parameter.Add(new VariableType("len", LwipDefs.Vt_U16));
|
||||
setMethodDecl.Parameter.Add(new VariableType("value", VariableType.VoidString, "*"));
|
||||
setMethodDecl.ReturnType = new VariableType(null, LwipDefs.Vt_Snmp_err);
|
||||
mibFile.Declarations.Add(setMethodDecl);
|
||||
|
||||
Function setMethod = Function.FromDeclaration(setMethodDecl);
|
||||
setMethodName = setMethod.Name;
|
||||
|
||||
returnValue = new VariableDeclaration((VariableType)setMethod.ReturnType.Clone(), LwipDefs.Def_ErrorCode_Ok);
|
||||
returnValue.Type.Name = "err";
|
||||
setMethod.Declarations.Add(returnValue);
|
||||
setMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", setMethod.Parameter[0].Name);
|
||||
|
||||
valueVarUsed = false;
|
||||
lenVarUsed = false;
|
||||
|
||||
GenerateSetMethodCode(setMethod, setMethod.Parameter[2].Name, ref valueVarUsed, setMethod.Parameter[1].Name, ref lenVarUsed, returnValue.Type.Name);
|
||||
|
||||
if (!valueVarUsed)
|
||||
{
|
||||
setMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", setMethod.Parameter[2].Name);
|
||||
}
|
||||
if (!lenVarUsed)
|
||||
{
|
||||
setMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", setMethod.Parameter[1].Name);
|
||||
}
|
||||
|
||||
setMethod.AddCodeFormat("return {0};", returnValue.Type.Name);
|
||||
|
||||
mibFile.Implementation.Add(setMethod);
|
||||
}
|
||||
}
|
||||
|
||||
// create and add node declaration
|
||||
string nodeInitialization;
|
||||
if (this.accessMode == SnmpAccessMode.ReadOnly)
|
||||
{
|
||||
nodeInitialization = String.Format("SNMP_SCALAR_CREATE_NODE_READONLY({0}, {1}, {2})",
|
||||
this.Oid,
|
||||
LwipDefs.GetAsn1DefForSnmpDataType(this.dataType),
|
||||
getMethodName);
|
||||
}
|
||||
else
|
||||
{
|
||||
nodeInitialization = String.Format("SNMP_SCALAR_CREATE_NODE({0}, {1}, {2}, {3}, {4}, {5})",
|
||||
this.Oid,
|
||||
LwipDefs.GetLwipDefForSnmpAccessMode(this.accessMode),
|
||||
LwipDefs.GetAsn1DefForSnmpDataType(this.dataType),
|
||||
getMethodName,
|
||||
testMethodName,
|
||||
setMethodName);
|
||||
}
|
||||
|
||||
mibFile.Declarations.Add(new VariableDeclaration(
|
||||
new VariableType(this.FullNodeName, LwipDefs.Vt_StScalarNode, null, ConstType.Value),
|
||||
nodeInitialization, isStatic: true));
|
||||
}
|
||||
|
||||
public virtual void GenerateGetMethodCode(CodeContainerBase container, string valueVarName, ref bool valueVarUsed, string retLenVarName)
|
||||
{
|
||||
bool localValueVarUsed;
|
||||
if (GenerateValueDeclaration(container, LocalValueName, valueVarName))
|
||||
{
|
||||
valueVarUsed = true;
|
||||
localValueVarUsed = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
localValueVarUsed = true; // do not generate UNUSED_ARG code
|
||||
}
|
||||
|
||||
if (this.FixedValueLength == null)
|
||||
{
|
||||
// check that value with variable length fits into buffer
|
||||
container.AddElement(new Comment(String.Format("TODO: take care that value with variable length fits into buffer: ({0} <= SNMP_MAX_VALUE_SIZE)", retLenVarName), singleLine: true));
|
||||
}
|
||||
|
||||
GenerateGetMethodCodeCore(container, LocalValueName, ref localValueVarUsed, retLenVarName);
|
||||
if (!localValueVarUsed)
|
||||
{
|
||||
container.AddCode(String.Format("LWIP_UNUSED_ARG({0});", LocalValueName));
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void GenerateGetMethodCodeCore(CodeContainerBase container, string localValueVarName, ref bool localValueVarUsed, string retLenVarName)
|
||||
{
|
||||
container.AddElement(new Comment(String.Format("TODO: put requested value to '*{0}' here", localValueVarName), singleLine: true));
|
||||
container.AddCodeFormat("{0} = {1};",
|
||||
retLenVarName,
|
||||
(!String.IsNullOrWhiteSpace(this.FixedValueLength)) ? this.FixedValueLength : "0");
|
||||
}
|
||||
|
||||
public virtual void GenerateTestMethodCode(CodeContainerBase container, string valueVarName, ref bool valueVarUsed, string lenVarName, ref bool lenVarUsed, string retErrVarName)
|
||||
{
|
||||
if (this.Restrictions.Count > 0)
|
||||
{
|
||||
bool localVarUsed;
|
||||
if (GenerateValueDeclaration(container, LocalValueName, valueVarName))
|
||||
{
|
||||
valueVarUsed = true;
|
||||
localVarUsed = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
localVarUsed = true; // do not generate UNUSED_ARG code
|
||||
}
|
||||
|
||||
if (!String.IsNullOrWhiteSpace(this.FixedValueLength))
|
||||
{
|
||||
// check for fixed value
|
||||
container.AddCodeFormat("LWIP_ASSERT(\"Invalid length for datatype\", ({0} == {1}));", lenVarName, this.FixedValueLength);
|
||||
lenVarUsed = true;
|
||||
}
|
||||
|
||||
GenerateTestMethodCodeCore(container, LocalValueName, ref localVarUsed, lenVarName, ref lenVarUsed, retErrVarName);
|
||||
|
||||
if (!localVarUsed)
|
||||
{
|
||||
container.AddCode(String.Format("LWIP_UNUSED_ARG({0});", LocalValueName));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
container.AddCodeFormat("{0} = {1};", retErrVarName, LwipDefs.Def_ErrorCode_Ok);
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void GenerateTestMethodCodeCore(CodeContainerBase container, string localValueVarName, ref bool localValueVarUsed, string lenVarName, ref bool lenVarUsed, string retErrVarName)
|
||||
{
|
||||
container.AddElement(new Comment(String.Format("TODO: test new value here:\nif (*{0} == ) {1} = {2};", localValueVarName, retErrVarName, LwipDefs.Def_ErrorCode_Ok)));
|
||||
}
|
||||
|
||||
public virtual void GenerateSetMethodCode(CodeContainerBase container, string valueVarName, ref bool valueVarUsed, string lenVarName, ref bool lenVarUsed, string retErrVarName)
|
||||
{
|
||||
bool localVarUsed;
|
||||
if (GenerateValueDeclaration(container, LocalValueName, valueVarName))
|
||||
{
|
||||
valueVarUsed = true;
|
||||
localVarUsed = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
localVarUsed = true; // do not generate UNUSED_ARG code
|
||||
}
|
||||
|
||||
GenerateSetMethodCodeCore(container, LocalValueName, ref localVarUsed, lenVarName, ref lenVarUsed, retErrVarName);
|
||||
|
||||
if (!localVarUsed)
|
||||
{
|
||||
container.AddCode(String.Format("LWIP_UNUSED_ARG({0});", LocalValueName));
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void GenerateSetMethodCodeCore(CodeContainerBase container, string localValueVarName, ref bool localValueVarUsed, string lenVarName, ref bool lenVarUsed, string retErrVarName)
|
||||
{
|
||||
container.AddElement(new Comment(String.Format("TODO: store new value contained in '*{0}' here", localValueVarName), singleLine: true));
|
||||
}
|
||||
|
||||
|
||||
protected virtual bool GenerateValueDeclaration(CodeContainerBase container, string variableName, string sourceName)
|
||||
{
|
||||
container.AddDeclaration(new VariableDeclaration(
|
||||
new VariableType(variableName, LwipDefs.Vt_U8, "*"),
|
||||
"(" + new VariableType(null, LwipDefs.Vt_U8, "*") + ")" + sourceName));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public static SnmpScalarNode CreateFromDatatype(SnmpDataType dataType, SnmpTreeNode parentNode)
|
||||
{
|
||||
switch (dataType)
|
||||
{
|
||||
case SnmpDataType.Integer:
|
||||
return new SnmpScalarNodeInt(parentNode);
|
||||
|
||||
case SnmpDataType.Gauge:
|
||||
case SnmpDataType.Counter:
|
||||
case SnmpDataType.TimeTicks:
|
||||
return new SnmpScalarNodeUint(dataType, parentNode);
|
||||
}
|
||||
|
||||
return new SnmpScalarNode(parentNode);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Text;
|
||||
using CCodeGeneration;
|
||||
|
||||
namespace LwipSnmpCodeGeneration
|
||||
{
|
||||
public class SnmpScalarNodeBits : SnmpScalarNode
|
||||
{
|
||||
private readonly uint bitCount;
|
||||
|
||||
public SnmpScalarNodeBits(SnmpTreeNode parentNode, uint bitCount)
|
||||
: base(parentNode)
|
||||
{
|
||||
this.DataType = SnmpDataType.Bits;
|
||||
this.bitCount = bitCount;
|
||||
}
|
||||
|
||||
public override void GenerateGetMethodCode(CodeContainerBase container, string valueVarName, ref bool valueVarUsed, string retLenVarName)
|
||||
{
|
||||
container.AddCode(String.Format(
|
||||
"{0} = snmp_encode_bits(({1} *){2}, SNMP_MAX_VALUE_SIZE, 0 /* TODO: pass real value here */, {3});",
|
||||
retLenVarName,
|
||||
LwipDefs.Vt_U8,
|
||||
valueVarName,
|
||||
this.bitCount));
|
||||
|
||||
valueVarUsed = true;
|
||||
}
|
||||
|
||||
public override void GenerateTestMethodCode(CodeContainerBase container, string valueVarName, ref bool valueVarUsed, string lenVarName, ref bool lenVarUsed, string retErrVarName)
|
||||
{
|
||||
if (this.Restrictions.Count > 0)
|
||||
{
|
||||
const string bitVarName = "bits";
|
||||
|
||||
container.Declarations.Add(new VariableDeclaration(new VariableType(bitVarName, LwipDefs.Vt_U32)));
|
||||
|
||||
IfThenElse ite = new IfThenElse(String.Format(
|
||||
"snmp_decode_bits(({0} *){1}, {2}, &{3}) == ERR_OK",
|
||||
LwipDefs.Vt_U8,
|
||||
valueVarName,
|
||||
lenVarName,
|
||||
bitVarName));
|
||||
|
||||
valueVarUsed = true;
|
||||
lenVarUsed = true;
|
||||
|
||||
StringBuilder innerIfCond = new StringBuilder();
|
||||
foreach (IRestriction restriction in this.Restrictions)
|
||||
{
|
||||
innerIfCond.Append(restriction.GetCheckCodeValid(bitVarName));
|
||||
innerIfCond.Append(" || ");
|
||||
}
|
||||
|
||||
innerIfCond.Length -= 4;
|
||||
|
||||
IfThenElse innerIte = new IfThenElse(innerIfCond.ToString());
|
||||
innerIte.AddCode(String.Format("{0} = {1};", retErrVarName, LwipDefs.Def_ErrorCode_Ok));
|
||||
ite.AddElement(innerIte);
|
||||
container.AddElement(ite);
|
||||
}
|
||||
else
|
||||
{
|
||||
base.GenerateTestMethodCode(container, valueVarName, ref valueVarUsed, lenVarName, ref lenVarUsed, retErrVarName);
|
||||
}
|
||||
}
|
||||
|
||||
public override void GenerateSetMethodCode(CodeContainerBase container, string valueVarName, ref bool valueVarUsed, string lenVarName, ref bool lenVarUsed, string retErrVarName)
|
||||
{
|
||||
const string bitVarName = "bits";
|
||||
|
||||
container.Declarations.Add(new VariableDeclaration(new VariableType(bitVarName, LwipDefs.Vt_U32)));
|
||||
|
||||
IfThenElse ite = new IfThenElse(String.Format(
|
||||
"snmp_decode_bits(({0} *){1}, {2}, &{3}) == ERR_OK",
|
||||
LwipDefs.Vt_U8,
|
||||
valueVarName,
|
||||
lenVarName,
|
||||
bitVarName));
|
||||
|
||||
valueVarUsed = true;
|
||||
lenVarUsed = true;
|
||||
|
||||
ite.AddElement(new Comment(String.Format("TODO: store new value contained in '{0}' here", bitVarName), singleLine: true));
|
||||
|
||||
container.AddElement(ite);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Text;
|
||||
using CCodeGeneration;
|
||||
|
||||
namespace LwipSnmpCodeGeneration
|
||||
{
|
||||
public class SnmpScalarNodeCounter64 : SnmpScalarNode
|
||||
{
|
||||
public SnmpScalarNodeCounter64(SnmpTreeNode parentNode)
|
||||
: base(parentNode)
|
||||
{
|
||||
this.DataType = SnmpDataType.Counter64;
|
||||
}
|
||||
|
||||
protected override bool GenerateValueDeclaration(CodeContainerBase container, string variableName, string sourceName)
|
||||
{
|
||||
container.AddDeclaration(new VariableDeclaration(
|
||||
new VariableType(variableName + "_high", LwipDefs.Vt_U32, "*"),
|
||||
"(" + new VariableType(null, LwipDefs.Vt_U32, "*").ToString() + ")" + sourceName));
|
||||
container.AddDeclaration(new VariableDeclaration(
|
||||
new VariableType(variableName + "_low", LwipDefs.Vt_U32, "*"),
|
||||
variableName + "_high + 1"));
|
||||
|
||||
container.AddCode(String.Format("LWIP_UNUSED_ARG({0}_high);", variableName));
|
||||
container.AddCode(String.Format("LWIP_UNUSED_ARG({0}_low);", variableName));
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public override string FixedValueLength
|
||||
{
|
||||
get { return String.Format("(2 * sizeof({0}))", LwipDefs.Vt_U32); }
|
||||
}
|
||||
|
||||
public override int OidRepresentationLen
|
||||
{
|
||||
get { return 1; }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Text;
|
||||
using CCodeGeneration;
|
||||
|
||||
namespace LwipSnmpCodeGeneration
|
||||
{
|
||||
public class SnmpScalarNodeInt : SnmpScalarNode
|
||||
{
|
||||
public SnmpScalarNodeInt(SnmpTreeNode parentNode)
|
||||
: base(parentNode)
|
||||
{
|
||||
this.DataType = SnmpDataType.Integer;
|
||||
}
|
||||
|
||||
protected override void GenerateTestMethodCodeCore(CodeContainerBase container, string localValueVarName, ref bool localValueVarUsed, string lenVarName, ref bool lenVarUsed, string retErrVarName)
|
||||
{
|
||||
System.Diagnostics.Trace.Assert(this.Restrictions.Count > 0);
|
||||
|
||||
StringBuilder ifCond = new StringBuilder();
|
||||
foreach (IRestriction restriction in this.Restrictions)
|
||||
{
|
||||
ifCond.Append(restriction.GetCheckCodeValid("*" + localValueVarName));
|
||||
ifCond.Append(" || ");
|
||||
|
||||
localValueVarUsed = true;
|
||||
}
|
||||
|
||||
ifCond.Length -= 4;
|
||||
|
||||
IfThenElse ite = new IfThenElse(ifCond.ToString());
|
||||
ite.AddCode(String.Format("{0} = {1};", retErrVarName, LwipDefs.Def_ErrorCode_Ok));
|
||||
container.AddElement(ite);
|
||||
}
|
||||
|
||||
protected override bool GenerateValueDeclaration(CodeContainerBase container, string variableName, string sourceName)
|
||||
{
|
||||
container.AddDeclaration(new VariableDeclaration(
|
||||
new VariableType(variableName, LwipDefs.Vt_S32, "*"),
|
||||
"(" + new VariableType(null, LwipDefs.Vt_S32, "*") + ")" + sourceName));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override string FixedValueLength
|
||||
{
|
||||
get { return String.Format("sizeof({0})", LwipDefs.Vt_S32); }
|
||||
}
|
||||
|
||||
public override int OidRepresentationLen
|
||||
{
|
||||
get { return 1; }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using CCodeGeneration;
|
||||
|
||||
namespace LwipSnmpCodeGeneration
|
||||
{
|
||||
public class SnmpScalarNodeObjectIdentifier: SnmpScalarNode
|
||||
{
|
||||
public SnmpScalarNodeObjectIdentifier(SnmpTreeNode parentNode)
|
||||
: base(parentNode)
|
||||
{
|
||||
this.DataType = SnmpDataType.ObjectIdentifier;
|
||||
}
|
||||
|
||||
protected override bool GenerateValueDeclaration(CodeContainerBase container, string variableName, string sourceName)
|
||||
{
|
||||
container.AddDeclaration(new VariableDeclaration(
|
||||
new VariableType(variableName, LwipDefs.Vt_U32, "*"),
|
||||
"(" + new VariableType(null, LwipDefs.Vt_U32, "*") + ")" + sourceName));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected override void GenerateGetMethodCodeCore(CodeContainerBase container, string localValueVarName, ref bool localValueVarUsed, string retLenVarName)
|
||||
{
|
||||
container.AddElement(new Comment(String.Format("TODO: put requested value to '*{0}' here. '{0}' has to be interpreted as {1}[]", localValueVarName, LwipDefs.Vt_U32), singleLine: true));
|
||||
container.AddElement(EmptyLine.SingleLine);
|
||||
container.AddCode(String.Format("{0} = 0; // TODO: return real value length here (should be 'numOfElements * sizeof({1})')", retLenVarName, LwipDefs.Vt_U32));
|
||||
}
|
||||
|
||||
protected override void GenerateTestMethodCodeCore(CodeContainerBase container, string localValueVarName, ref bool localValueVarUsed, string lenVarName, ref bool lenVarUsed, string retErrVarName)
|
||||
{
|
||||
VariableDeclaration objIdLenVar = new VariableDeclaration(
|
||||
new VariableType(localValueVarName + "_len", LwipDefs.Vt_U8),
|
||||
String.Format("{0} / sizeof({1})", lenVarName, LwipDefs.Vt_U32));
|
||||
lenVarUsed = true;
|
||||
|
||||
container.Declarations.Add(objIdLenVar);
|
||||
|
||||
base.GenerateTestMethodCodeCore(container, localValueVarName, ref localValueVarUsed, lenVarName, ref lenVarUsed, retErrVarName);
|
||||
|
||||
container.AddCode(String.Format("LWIP_UNUSED_ARG({0});", objIdLenVar.Type.Name));
|
||||
}
|
||||
|
||||
protected override void GenerateSetMethodCodeCore(CodeContainerBase container, string localValueVarName, ref bool localValueVarUsed, string lenVarName, ref bool lenVarUsed, string retErrVarName)
|
||||
{
|
||||
VariableDeclaration objIdLenVar = new VariableDeclaration(
|
||||
new VariableType(localValueVarName + "_len", LwipDefs.Vt_U8),
|
||||
String.Format("{0} / sizeof({1})", lenVarName, LwipDefs.Vt_U32));
|
||||
lenVarUsed = true;
|
||||
|
||||
container.Declarations.Add(objIdLenVar);
|
||||
|
||||
base.GenerateSetMethodCodeCore(container, localValueVarName, ref localValueVarUsed, lenVarName, ref lenVarUsed, retErrVarName);
|
||||
|
||||
container.AddCode(String.Format("LWIP_UNUSED_ARG({0});", objIdLenVar.Type.Name));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Text;
|
||||
using CCodeGeneration;
|
||||
|
||||
namespace LwipSnmpCodeGeneration
|
||||
{
|
||||
public class SnmpScalarNodeOctetString : SnmpScalarNode
|
||||
{
|
||||
public SnmpScalarNodeOctetString(SnmpDataType dataType, SnmpTreeNode parentNode)
|
||||
: base(parentNode)
|
||||
{
|
||||
System.Diagnostics.Debug.Assert(
|
||||
(dataType == SnmpDataType.OctetString) ||
|
||||
(dataType == SnmpDataType.Opaque) ||
|
||||
(dataType == SnmpDataType.IpAddress));
|
||||
|
||||
this.DataType = dataType;
|
||||
}
|
||||
|
||||
protected override void GenerateGetMethodCodeCore(CodeContainerBase container, string localValueVarName, ref bool localValueVarUsed, string retLenVarName)
|
||||
{
|
||||
if (this.Restrictions.Count > 0)
|
||||
{
|
||||
StringBuilder ifCond = new StringBuilder();
|
||||
foreach (IRestriction restriction in this.Restrictions)
|
||||
{
|
||||
ifCond.Append(restriction.GetCheckCodeValid(retLenVarName));
|
||||
ifCond.Append(" || ");
|
||||
}
|
||||
|
||||
ifCond.Length -= 4;
|
||||
container.AddElement(new Comment("TODO: take care of len restrictions defined in MIB: " + ifCond, singleLine: true));
|
||||
}
|
||||
base.GenerateGetMethodCodeCore(container, localValueVarName, ref localValueVarUsed, retLenVarName);
|
||||
}
|
||||
|
||||
protected override void GenerateTestMethodCodeCore(CodeContainerBase container, string localValueVarName, ref bool localValueVarUsed, string lenVarName, ref bool lenVarUsed, string retErrVarName)
|
||||
{
|
||||
System.Diagnostics.Trace.Assert(this.Restrictions.Count > 0);
|
||||
|
||||
// checks refer to length of octet string
|
||||
StringBuilder ifCond = new StringBuilder();
|
||||
foreach (IRestriction restriction in this.Restrictions)
|
||||
{
|
||||
ifCond.Append(restriction.GetCheckCodeValid(lenVarName));
|
||||
ifCond.Append(" || ");
|
||||
|
||||
lenVarUsed = true;
|
||||
}
|
||||
|
||||
ifCond.Length -= 4;
|
||||
|
||||
IfThenElse ite = new IfThenElse(ifCond.ToString());
|
||||
ite.AddCode(String.Format("{0} = {1};", retErrVarName, LwipDefs.Def_ErrorCode_Ok));
|
||||
container.AddElement(ite);
|
||||
}
|
||||
|
||||
public override int OidRepresentationLen
|
||||
{
|
||||
get
|
||||
{
|
||||
// check restrictions if we are set to one fixed length
|
||||
if ((this.Restrictions != null) && (this.Restrictions.Count > 0))
|
||||
{
|
||||
foreach (IRestriction restriction in this.Restrictions)
|
||||
{
|
||||
if (restriction is IsInRangeRestriction)
|
||||
{
|
||||
if ((restriction as IsInRangeRestriction).RangeStart == (restriction as IsInRangeRestriction).RangeEnd)
|
||||
{
|
||||
return (int)(restriction as IsInRangeRestriction).RangeStart;
|
||||
}
|
||||
}
|
||||
else if (restriction is IsEqualRestriction)
|
||||
{
|
||||
return (int)(restriction as IsEqualRestriction).Value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return -1; // variable length
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using CCodeGeneration;
|
||||
|
||||
namespace LwipSnmpCodeGeneration
|
||||
{
|
||||
public class SnmpScalarNodeTruthValue : SnmpScalarNodeInt
|
||||
{
|
||||
public SnmpScalarNodeTruthValue(SnmpTreeNode parentNode)
|
||||
: base(parentNode)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void GenerateGetMethodCodeCore(CodeContainerBase container, string localValueVarName, ref bool localValueVarUsed, string retLenVarName)
|
||||
{
|
||||
container.AddCodeFormat("snmp_encode_truthvalue({0}, /* TODO: put requested bool value here */ 0);", localValueVarName);
|
||||
localValueVarUsed = true;
|
||||
|
||||
container.AddCode(String.Format("{0} = {1};",
|
||||
retLenVarName,
|
||||
(!String.IsNullOrWhiteSpace(this.FixedValueLength)) ? this.FixedValueLength : "0"));
|
||||
}
|
||||
|
||||
protected override void GenerateSetMethodCodeCore(CodeContainerBase container, string localValueVarName, ref bool localValueVarUsed, string lenVarName, ref bool lenVarUsed, string retErrVarName)
|
||||
{
|
||||
VariableType truthVar = new VariableType("bool_value", LwipDefs.Vt_U8);
|
||||
container.Declarations.Add(new VariableDeclaration(truthVar));
|
||||
|
||||
container.AddCodeFormat("snmp_decode_truthvalue({0}, &{1});", localValueVarName, truthVar.Name);
|
||||
localValueVarUsed = true;
|
||||
|
||||
container.AddElement(new Comment(String.Format("TODO: store new value contained in '{0}' here", truthVar.Name), singleLine: true));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Text;
|
||||
using CCodeGeneration;
|
||||
|
||||
namespace LwipSnmpCodeGeneration
|
||||
{
|
||||
public class SnmpScalarNodeUint : SnmpScalarNode
|
||||
{
|
||||
public SnmpScalarNodeUint(SnmpDataType dataType, SnmpTreeNode parentNode)
|
||||
: base(parentNode)
|
||||
{
|
||||
System.Diagnostics.Debug.Assert(
|
||||
(dataType == SnmpDataType.Counter) ||
|
||||
(dataType == SnmpDataType.Gauge) ||
|
||||
(dataType == SnmpDataType.TimeTicks));
|
||||
|
||||
this.DataType = dataType;
|
||||
}
|
||||
|
||||
protected override void GenerateTestMethodCodeCore(CodeContainerBase container, string localValueVarName, ref bool localValueVarUsed, string lenVarName, ref bool lenVarUsed, string retErrVarName)
|
||||
{
|
||||
System.Diagnostics.Trace.Assert(this.Restrictions.Count > 0);
|
||||
|
||||
StringBuilder ifCond = new StringBuilder();
|
||||
foreach (IRestriction restriction in this.Restrictions)
|
||||
{
|
||||
ifCond.Append(restriction.GetCheckCodeValid("*" + localValueVarName));
|
||||
ifCond.Append(" || ");
|
||||
|
||||
localValueVarUsed = true;
|
||||
}
|
||||
|
||||
ifCond.Length -= 4;
|
||||
|
||||
IfThenElse ite = new IfThenElse(ifCond.ToString());
|
||||
ite.AddCode(String.Format("{0} = {1};", retErrVarName, LwipDefs.Def_ErrorCode_Ok));
|
||||
container.AddElement(ite);
|
||||
}
|
||||
|
||||
protected override bool GenerateValueDeclaration(CodeContainerBase container, string variableName, string sourceName)
|
||||
{
|
||||
container.AddDeclaration(new VariableDeclaration(
|
||||
new VariableType(variableName, LwipDefs.Vt_U32, "*"),
|
||||
"(" + new VariableType(null, LwipDefs.Vt_U32, "*") + ")" + sourceName));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override string FixedValueLength
|
||||
{
|
||||
get { return String.Format("sizeof({0})", LwipDefs.Vt_U32); }
|
||||
}
|
||||
|
||||
public override int OidRepresentationLen
|
||||
{
|
||||
get { return 1; }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,332 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using CCodeGeneration;
|
||||
|
||||
namespace LwipSnmpCodeGeneration
|
||||
{
|
||||
public class SnmpTableNode: SnmpScalarAggregationNode
|
||||
{
|
||||
private readonly List<SnmpScalarNode> cellNodes = new List<SnmpScalarNode>();
|
||||
private readonly List<SnmpScalarNode> indexNodes = new List<SnmpScalarNode>();
|
||||
private string augmentedTableRow = null;
|
||||
|
||||
|
||||
public SnmpTableNode(SnmpTreeNode parentNode)
|
||||
: base(parentNode)
|
||||
{
|
||||
}
|
||||
|
||||
public List<SnmpScalarNode> CellNodes
|
||||
{
|
||||
get { return cellNodes; }
|
||||
}
|
||||
|
||||
public List<SnmpScalarNode> IndexNodes
|
||||
{
|
||||
get { return indexNodes; }
|
||||
}
|
||||
|
||||
public string AugmentedTableRow
|
||||
{
|
||||
get { return this.augmentedTableRow; }
|
||||
set { this.augmentedTableRow = value; }
|
||||
}
|
||||
|
||||
public override string FullNodeName
|
||||
{
|
||||
get
|
||||
{
|
||||
string result = this.Name.ToLowerInvariant();
|
||||
if (!result.Contains("table"))
|
||||
{
|
||||
result += "_table";
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
protected override IEnumerable<SnmpScalarNode> AggregatedScalarNodes
|
||||
{
|
||||
get { return this.cellNodes; }
|
||||
}
|
||||
|
||||
public override void GenerateCode(MibCFile mibFile)
|
||||
{
|
||||
FunctionDeclaration getInstanceMethodDecl = new FunctionDeclaration(this.FullNodeName + LwipDefs.FnctSuffix_GetInstance, isStatic: true);
|
||||
getInstanceMethodDecl.Parameter.Add(new VariableType("column", LwipDefs.Vt_U32, "*", ConstType.Value));
|
||||
getInstanceMethodDecl.Parameter.Add(new VariableType("row_oid", LwipDefs.Vt_U32, "*", ConstType.Value));
|
||||
getInstanceMethodDecl.Parameter.Add(new VariableType("row_oid_len", LwipDefs.Vt_U8, ""));
|
||||
getInstanceMethodDecl.Parameter.Add(new VariableType("cell_instance", LwipDefs.Vt_StNodeInstance, "*"));
|
||||
getInstanceMethodDecl.ReturnType = new VariableType(null, LwipDefs.Vt_Snmp_err);
|
||||
mibFile.Declarations.Add(getInstanceMethodDecl);
|
||||
|
||||
Function getInstanceMethod = Function.FromDeclaration(getInstanceMethodDecl);
|
||||
GenerateGetInstanceMethodCode(getInstanceMethod);
|
||||
mibFile.Implementation.Add(getInstanceMethod);
|
||||
|
||||
|
||||
FunctionDeclaration getNextInstanceMethodDecl = new FunctionDeclaration(this.FullNodeName + LwipDefs.FnctSuffix_GetNextInstance, isStatic: true);
|
||||
getNextInstanceMethodDecl.Parameter.Add(new VariableType("column", LwipDefs.Vt_U32, "*", ConstType.Value));
|
||||
getNextInstanceMethodDecl.Parameter.Add(new VariableType("row_oid", LwipDefs.Vt_StObjectId, "*"));
|
||||
getNextInstanceMethodDecl.Parameter.Add(new VariableType("cell_instance", LwipDefs.Vt_StNodeInstance, "*"));
|
||||
getNextInstanceMethodDecl.ReturnType = new VariableType(null, LwipDefs.Vt_Snmp_err);
|
||||
mibFile.Declarations.Add(getNextInstanceMethodDecl);
|
||||
|
||||
Function getNextInstanceMethod = Function.FromDeclaration(getNextInstanceMethodDecl);
|
||||
GenerateGetNextInstanceMethodCode(getNextInstanceMethod);
|
||||
mibFile.Implementation.Add(getNextInstanceMethod);
|
||||
|
||||
|
||||
VariableType instanceType = new VariableType("cell_instance", LwipDefs.Vt_StNodeInstance, "*");
|
||||
GenerateAggregatedCode(
|
||||
mibFile,
|
||||
instanceType,
|
||||
String.Format("SNMP_TABLE_GET_COLUMN_FROM_OID({0}->instance_oid.id)", instanceType.Name));
|
||||
|
||||
|
||||
#region create and add column/table definitions
|
||||
|
||||
StringBuilder colDefs = new StringBuilder();
|
||||
foreach (SnmpScalarNode colNode in this.cellNodes)
|
||||
{
|
||||
colDefs.AppendFormat(" {{{0}, {1}, {2}}}, /* {3} */ \n",
|
||||
colNode.Oid,
|
||||
LwipDefs.GetAsn1DefForSnmpDataType(colNode.DataType),
|
||||
LwipDefs.GetLwipDefForSnmpAccessMode(colNode.AccessMode),
|
||||
colNode.Name);
|
||||
}
|
||||
if (colDefs.Length > 0)
|
||||
{
|
||||
colDefs.Length--;
|
||||
}
|
||||
|
||||
VariableDeclaration colDefsDecl = new VariableDeclaration(
|
||||
new VariableType(this.FullNodeName + "_columns", LwipDefs.Vt_StTableColumnDef, null, ConstType.Value, String.Empty),
|
||||
"{\n" + colDefs + "\n}",
|
||||
isStatic: true);
|
||||
|
||||
mibFile.Declarations.Add(colDefsDecl);
|
||||
|
||||
string nodeInitialization = String.Format("SNMP_TABLE_CREATE({0}, {1}, {2}, {3}, {4}, {5}, {6})",
|
||||
this.Oid,
|
||||
colDefsDecl.Type.Name,
|
||||
getInstanceMethodDecl.Name, getNextInstanceMethodDecl.Name,
|
||||
(this.GetMethodRequired) ? this.GetMethodName : LwipDefs.Null,
|
||||
(this.TestMethodRequired) ? this.TestMethodName : LwipDefs.Null,
|
||||
(this.SetMethodRequired) ? this.SetMethodName : LwipDefs.Null
|
||||
);
|
||||
|
||||
mibFile.Declarations.Add(new VariableDeclaration(
|
||||
new VariableType(this.FullNodeName, LwipDefs.Vt_StTableNode, null, ConstType.Value),
|
||||
nodeInitialization,
|
||||
isStatic: true));
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
protected virtual void GenerateGetInstanceMethodCode(Function getInstanceMethod)
|
||||
{
|
||||
VariableDeclaration returnValue = new VariableDeclaration((VariableType)getInstanceMethod.ReturnType.Clone(), LwipDefs.Def_ErrorCode_NoSuchInstance);
|
||||
returnValue.Type.Name = "err";
|
||||
getInstanceMethod.Declarations.Add(returnValue);
|
||||
|
||||
int instanceOidLength = 0;
|
||||
StringBuilder indexColumns = new StringBuilder();
|
||||
foreach (SnmpScalarNode indexNode in this.indexNodes)
|
||||
{
|
||||
if (instanceOidLength >= 0)
|
||||
{
|
||||
if (indexNode.OidRepresentationLen >= 0)
|
||||
{
|
||||
instanceOidLength += indexNode.OidRepresentationLen;
|
||||
}
|
||||
else
|
||||
{
|
||||
// at least one index column has a variable length -> we cannot perform a static check
|
||||
instanceOidLength = -1;
|
||||
}
|
||||
}
|
||||
|
||||
indexColumns.AppendFormat(
|
||||
" {0} ({1}, OID length = {2})\n",
|
||||
indexNode.Name,
|
||||
indexNode.DataType,
|
||||
(indexNode.OidRepresentationLen >= 0) ? indexNode.OidRepresentationLen.ToString() : "variable");
|
||||
}
|
||||
if (indexColumns.Length > 0)
|
||||
{
|
||||
indexColumns.Length--;
|
||||
|
||||
getInstanceMethod.Declarations.Insert(0, new Comment(String.Format(
|
||||
"The instance OID of this table consists of following (index) column(s):\n{0}",
|
||||
indexColumns)));
|
||||
}
|
||||
|
||||
string augmentsHint = "";
|
||||
if (!String.IsNullOrWhiteSpace(this.augmentedTableRow))
|
||||
{
|
||||
augmentsHint = String.Format(
|
||||
"This table augments table '{0}'! Index columns therefore belong to table '{0}'!\n" +
|
||||
"You may simply call the '*{1}' method of this table.\n\n",
|
||||
(this.augmentedTableRow.ToLowerInvariant().EndsWith("entry")) ? this.augmentedTableRow.Substring(0, this.augmentedTableRow.Length-5) : this.augmentedTableRow,
|
||||
LwipDefs.FnctSuffix_GetInstance);
|
||||
}
|
||||
|
||||
CodeContainerBase ccb = getInstanceMethod;
|
||||
if (instanceOidLength > 0)
|
||||
{
|
||||
IfThenElse ite = new IfThenElse(String.Format("{0} == {1}", getInstanceMethod.Parameter[2].Name, instanceOidLength));
|
||||
getInstanceMethod.AddElement(ite);
|
||||
ccb = ite;
|
||||
}
|
||||
|
||||
ccb.AddCodeFormat("LWIP_UNUSED_ARG({0});", getInstanceMethod.Parameter[0].Name);
|
||||
ccb.AddCodeFormat("LWIP_UNUSED_ARG({0});", getInstanceMethod.Parameter[1].Name);
|
||||
if (instanceOidLength <= 0)
|
||||
{
|
||||
ccb.AddCodeFormat("LWIP_UNUSED_ARG({0});", getInstanceMethod.Parameter[2].Name);
|
||||
}
|
||||
ccb.AddCodeFormat("LWIP_UNUSED_ARG({0});", getInstanceMethod.Parameter[3].Name);
|
||||
|
||||
ccb.AddElement(new Comment(String.Format(
|
||||
"TODO: check if '{0}'/'{1}' params contain a valid instance oid for a row\n" +
|
||||
"If so, set '{2} = {3};'\n\n" +
|
||||
"snmp_oid_* methods may be used for easier processing of oid\n\n" +
|
||||
"{4}" +
|
||||
"In order to avoid decoding OID a second time in subsequent get_value/set_test/set_value methods,\n" +
|
||||
"you may store an arbitrary value (like a pointer to target value object) in '{5}->reference'/'{5}->reference_len'.\n" +
|
||||
"But be aware that not always a subsequent method is called -> Do NOT allocate memory here and try to release it in subsequent methods!\n\n" +
|
||||
"You also may replace function pointers in '{5}' param for get/test/set methods which contain the default values from table definition,\n" +
|
||||
"in order to provide special methods, for the currently processed cell. Changed pointers are only valid for current request.",
|
||||
getInstanceMethod.Parameter[1].Name,
|
||||
getInstanceMethod.Parameter[2].Name,
|
||||
returnValue.Type.Name,
|
||||
LwipDefs.Def_ErrorCode_Ok,
|
||||
augmentsHint,
|
||||
getInstanceMethod.Parameter[3].Name
|
||||
)));
|
||||
|
||||
getInstanceMethod.AddCodeFormat("return {0};", returnValue.Type.Name);
|
||||
}
|
||||
|
||||
protected virtual void GenerateGetNextInstanceMethodCode(Function getNextInstanceMethod)
|
||||
{
|
||||
getNextInstanceMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", getNextInstanceMethod.Parameter[0].Name);
|
||||
getNextInstanceMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", getNextInstanceMethod.Parameter[1].Name);
|
||||
getNextInstanceMethod.AddCodeFormat("LWIP_UNUSED_ARG({0});", getNextInstanceMethod.Parameter[2].Name);
|
||||
|
||||
VariableDeclaration returnValue = new VariableDeclaration((VariableType)getNextInstanceMethod.ReturnType.Clone(), LwipDefs.Def_ErrorCode_NoSuchInstance);
|
||||
returnValue.Type.Name = "err";
|
||||
getNextInstanceMethod.Declarations.Add(returnValue);
|
||||
|
||||
StringBuilder indexColumns = new StringBuilder();
|
||||
foreach (SnmpScalarNode indexNode in this.indexNodes)
|
||||
{
|
||||
indexColumns.AppendFormat(
|
||||
" {0} ({1}, OID length = {2})\n",
|
||||
indexNode.Name,
|
||||
indexNode.DataType,
|
||||
(indexNode.OidRepresentationLen >= 0) ? indexNode.OidRepresentationLen.ToString() : "variable");
|
||||
}
|
||||
if (indexColumns.Length > 0)
|
||||
{
|
||||
indexColumns.Length--;
|
||||
|
||||
getNextInstanceMethod.Declarations.Insert(0, new Comment(String.Format(
|
||||
"The instance OID of this table consists of following (index) column(s):\n{0}",
|
||||
indexColumns)));
|
||||
}
|
||||
|
||||
string augmentsHint = "";
|
||||
if (!String.IsNullOrWhiteSpace(this.augmentedTableRow))
|
||||
{
|
||||
augmentsHint = String.Format(
|
||||
"This table augments table '{0}'! Index columns therefore belong to table '{0}'!\n" +
|
||||
"You may simply call the '*{1}' method of this table.\n\n",
|
||||
(this.augmentedTableRow.ToLowerInvariant().EndsWith("entry")) ? this.augmentedTableRow.Substring(0, this.augmentedTableRow.Length-5) : this.augmentedTableRow,
|
||||
LwipDefs.FnctSuffix_GetNextInstance);
|
||||
}
|
||||
|
||||
getNextInstanceMethod.AddElement(new Comment(String.Format(
|
||||
"TODO: analyze '{0}->id'/'{0}->len' and return the subsequent row instance\n" +
|
||||
"Be aware that '{0}->id'/'{0}->len' must not point to a valid instance or have correct instance length.\n" +
|
||||
"If '{0}->len' is 0, return the first instance. If '{0}->len' is longer than expected, cut superfluous OID parts.\n" +
|
||||
"If a valid next instance is found, store it in '{0}->id'/'{0}->len' and set '{1} = {2};'\n\n" +
|
||||
"snmp_oid_* methods may be used for easier processing of oid\n\n" +
|
||||
"{3}" +
|
||||
"In order to avoid decoding OID a second time in subsequent get_value/set_test/set_value methods,\n" +
|
||||
"you may store an arbitrary value (like a pointer to target value object) in '{4}->reference'/'{4}->reference_len'.\n" +
|
||||
"But be aware that not always a subsequent method is called -> Do NOT allocate memory here and try to release it in subsequent methods!\n\n" +
|
||||
"You also may replace function pointers in '{4}' param for get/test/set methods which contain the default values from table definition,\n" +
|
||||
"in order to provide special methods, for the currently processed cell. Changed pointers are only valid for current request.",
|
||||
getNextInstanceMethod.Parameter[1].Name,
|
||||
returnValue.Type.Name,
|
||||
LwipDefs.Def_ErrorCode_Ok,
|
||||
augmentsHint,
|
||||
getNextInstanceMethod.Parameter[2].Name
|
||||
)));
|
||||
|
||||
getNextInstanceMethod.AddElement(new Comment(String.Format(
|
||||
"For easier processing and getting the next instance, you may use the 'snmp_next_oid_*' enumerator.\n" +
|
||||
"Simply pass all known instance OID's to it and it returns the next valid one:\n\n" +
|
||||
"{0} state;\n" +
|
||||
"{1} result_buf;\n" +
|
||||
"snmp_next_oid_init(&state, {2}->id, {2}->len, result_buf.id, SNMP_MAX_OBJ_ID_LEN);\n" +
|
||||
"while ({{not all instances passed}}) {{\n" +
|
||||
" {1} test_oid;\n" +
|
||||
" {{fill test_oid to create instance oid for next instance}}\n" +
|
||||
" snmp_next_oid_check(&state, test_oid.id, test_oid.len, {{target_data_ptr}});\n" +
|
||||
"}}\n" +
|
||||
"if(state.status == SNMP_NEXT_OID_STATUS_SUCCESS) {{\n" +
|
||||
" snmp_oid_assign(row_oid, state.next_oid, state.next_oid_len);\n" +
|
||||
" {3}->reference.ptr = state.reference; //==target_data_ptr, for usage in subsequent get/test/set\n" +
|
||||
" {4} = {5};\n" +
|
||||
"}}"
|
||||
,
|
||||
LwipDefs.Vt_StNextOidState,
|
||||
LwipDefs.Vt_StObjectId,
|
||||
getNextInstanceMethod.Parameter[1].Name,
|
||||
getNextInstanceMethod.Parameter[2].Name,
|
||||
returnValue.Type.Name,
|
||||
LwipDefs.Def_ErrorCode_Ok
|
||||
)));
|
||||
|
||||
getNextInstanceMethod.AddCodeFormat("return {0};", returnValue.Type.Name);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,242 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using CCodeGeneration;
|
||||
|
||||
namespace LwipSnmpCodeGeneration
|
||||
{
|
||||
public class SnmpTreeNode: SnmpScalarAggregationNode
|
||||
{
|
||||
private readonly List<SnmpNode> childNodes = new List<SnmpNode>();
|
||||
private readonly List<SnmpScalarNode> childScalarNodes = new List<SnmpScalarNode>();
|
||||
private string fullOid = "";
|
||||
|
||||
public SnmpTreeNode(SnmpTreeNode parentNode)
|
||||
: base(parentNode)
|
||||
{
|
||||
}
|
||||
|
||||
public override string FullNodeName
|
||||
{
|
||||
get { return this.Name.ToLowerInvariant() + "_treenode"; }
|
||||
}
|
||||
|
||||
public string FullOid
|
||||
{
|
||||
get { return this.fullOid; }
|
||||
set { this.fullOid = value; }
|
||||
}
|
||||
|
||||
public List<SnmpNode> ChildNodes
|
||||
{
|
||||
get { return this.childNodes; }
|
||||
}
|
||||
|
||||
protected override IEnumerable<SnmpScalarNode> AggregatedScalarNodes
|
||||
{
|
||||
get { return this.childScalarNodes; }
|
||||
}
|
||||
|
||||
private void GenerateAggregatedCode(MibCFile mibFile, bool generateDeclarations, bool generateImplementations)
|
||||
{
|
||||
VariableType instanceType = new VariableType("instance", LwipDefs.Vt_StNodeInstance, "*");
|
||||
base.GenerateAggregatedCode(
|
||||
mibFile,
|
||||
instanceType,
|
||||
String.Format("{0}->node->oid", instanceType.Name),
|
||||
generateDeclarations,
|
||||
generateImplementations);
|
||||
}
|
||||
|
||||
private void GenerateAggregateMethodDeclarations(MibCFile mibFile)
|
||||
{
|
||||
if (LwipOpts.GenerateSingleAccessMethodsForTreeNodeScalars && (this.childScalarNodes.Count > 1))
|
||||
{
|
||||
GenerateAggregatedCode(mibFile, true, false);
|
||||
}
|
||||
}
|
||||
|
||||
public override void GenerateCode(MibCFile mibFile)
|
||||
{
|
||||
string nodeInitialization;
|
||||
|
||||
if (LwipOpts.GenerateSingleAccessMethodsForTreeNodeScalars && (this.childScalarNodes.Count > 1))
|
||||
{
|
||||
GenerateAggregatedCode(mibFile, false, true);
|
||||
}
|
||||
|
||||
// create and add node declaration
|
||||
if (this.childNodes.Count > 0)
|
||||
{
|
||||
StringBuilder subnodeArrayInitialization = new StringBuilder();
|
||||
|
||||
for (int i=0; i<this.childNodes.Count; i++)
|
||||
{
|
||||
subnodeArrayInitialization.Append(" &");
|
||||
subnodeArrayInitialization.Append(this.childNodes[i].FullNodeName);
|
||||
subnodeArrayInitialization.Append(".node");
|
||||
if (!(this.childNodes[i] is SnmpTreeNode))
|
||||
{
|
||||
subnodeArrayInitialization.Append(".node");
|
||||
}
|
||||
|
||||
if (i < (this.childNodes.Count - 1))
|
||||
{
|
||||
subnodeArrayInitialization.Append(",\n");
|
||||
}
|
||||
}
|
||||
|
||||
VariableDeclaration subnodeArray = new VariableDeclaration(
|
||||
new VariableType(this.Name.ToLowerInvariant() + "_subnodes", LwipDefs.Vt_StNode, "*", ConstType.Both, String.Empty),
|
||||
"{\n" + subnodeArrayInitialization + "\n}",
|
||||
isStatic: true);
|
||||
|
||||
mibFile.Declarations.Add(subnodeArray);
|
||||
|
||||
nodeInitialization = String.Format("SNMP_CREATE_TREE_NODE({0}, {1})", this.Oid, subnodeArray.Type.Name);
|
||||
}
|
||||
else
|
||||
{
|
||||
nodeInitialization = String.Format("SNMP_CREATE_EMPTY_TREE_NODE({0})", this.Oid);
|
||||
}
|
||||
|
||||
mibFile.Declarations.Add(new VariableDeclaration(
|
||||
new VariableType(this.FullNodeName, LwipDefs.Vt_StTreeNode, null, ConstType.Value),
|
||||
nodeInitialization,
|
||||
isStatic: true));
|
||||
}
|
||||
|
||||
public override void Analyze()
|
||||
{
|
||||
this.childScalarNodes.Clear();
|
||||
|
||||
// delegate analyze (don't use enumerator because the child node may change our child collection by e.g. removing or replacing itself)
|
||||
for (int i=this.ChildNodes.Count-1; i>=0; i--)
|
||||
{
|
||||
this.ChildNodes[i].Analyze();
|
||||
}
|
||||
|
||||
// collect scalar nodes
|
||||
foreach (SnmpNode childNode in this.childNodes)
|
||||
{
|
||||
SnmpScalarNode scalarNode = childNode as SnmpScalarNode;
|
||||
if (scalarNode != null)
|
||||
{
|
||||
this.childScalarNodes.Add(scalarNode);
|
||||
}
|
||||
}
|
||||
|
||||
base.Analyze();
|
||||
|
||||
// check if we can merge this node to a scalar array node (all childs need to be scalars)
|
||||
if (this.childNodes.Count > 0)
|
||||
{
|
||||
if (LwipOpts.GenerateScalarArrays && (this.childScalarNodes.Count == this.childNodes.Count) && (this.ParentNode != null))
|
||||
{
|
||||
SnmpScalarArrayNode scalarArrayNode = new SnmpScalarArrayNode(this.childScalarNodes, this.ParentNode);
|
||||
scalarArrayNode.Oid = this.Oid;
|
||||
scalarArrayNode.Name = this.Name;
|
||||
scalarArrayNode.Analyze();
|
||||
|
||||
for (int i=0; i<this.ParentNode.ChildNodes.Count; i++)
|
||||
{
|
||||
if (this.ParentNode.ChildNodes[i] == this)
|
||||
{
|
||||
this.ParentNode.ChildNodes.RemoveAt(i);
|
||||
this.ParentNode.ChildNodes.Insert(i, scalarArrayNode);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (LwipOpts.GenerateSingleAccessMethodsForTreeNodeScalars && (this.childScalarNodes.Count > 1))
|
||||
{
|
||||
foreach (SnmpScalarNode scalarNode in this.childScalarNodes)
|
||||
{
|
||||
scalarNode.UseExternalMethods = true;
|
||||
scalarNode.ExternalGetMethod = this.GetMethodName;
|
||||
scalarNode.ExternalTestMethod = this.TestMethodName;
|
||||
scalarNode.ExternalSetMethod = this.SetMethodName;
|
||||
}
|
||||
}
|
||||
}
|
||||
else // if (this.childNodes.Count == 0)
|
||||
{
|
||||
if (!LwipOpts.GenerateEmptyFolders && (this.ParentNode != null))
|
||||
{
|
||||
// do not generate this empty folder because it only waste (static) memory
|
||||
for (int i=0; i<this.ParentNode.ChildNodes.Count; i++)
|
||||
{
|
||||
if (this.ParentNode.ChildNodes[i] == this)
|
||||
{
|
||||
this.ParentNode.ChildNodes.RemoveAt(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void Generate(MibCFile generatedFile, MibHeaderFile generatedHeaderFile)
|
||||
{
|
||||
// generate code of child nodes
|
||||
foreach (SnmpNode childNode in this.childNodes)
|
||||
{
|
||||
if (childNode is SnmpTreeNode)
|
||||
{
|
||||
childNode.Generate(generatedFile, generatedHeaderFile);
|
||||
}
|
||||
}
|
||||
|
||||
Comment dividerComment = new Comment(
|
||||
String.Format("--- {0} {1} -----------------------------------------------------", this.Name, this.fullOid),
|
||||
singleLine: true);
|
||||
|
||||
generatedFile.Declarations.Add(dividerComment);
|
||||
generatedFile.Implementation.Add(dividerComment);
|
||||
|
||||
this.GenerateAggregateMethodDeclarations(generatedFile);
|
||||
|
||||
foreach (SnmpNode childNode in this.childNodes)
|
||||
{
|
||||
if (!(childNode is SnmpTreeNode))
|
||||
{
|
||||
childNode.Generate(generatedFile, generatedHeaderFile);
|
||||
}
|
||||
}
|
||||
|
||||
base.Generate(generatedFile, generatedHeaderFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
166
contrib/apps/LwipMibCompiler/MibViewer/FormMain.Designer.cs
generated
Normal file
166
contrib/apps/LwipMibCompiler/MibViewer/FormMain.Designer.cs
generated
Normal file
@@ -0,0 +1,166 @@
|
||||
namespace LwipMibViewer
|
||||
{
|
||||
partial class FormMain
|
||||
{
|
||||
/// <summary>
|
||||
/// Erforderliche Designervariable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Verwendete Ressourcen bereinigen.
|
||||
/// </summary>
|
||||
/// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Vom Windows Form-Designer generierter Code
|
||||
|
||||
/// <summary>
|
||||
/// Erforderliche Methode für die Designerunterstützung.
|
||||
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormMain));
|
||||
this.treeMib = new System.Windows.Forms.TreeView();
|
||||
this.imagelistTreeNodeImages = new System.Windows.Forms.ImageList(this.components);
|
||||
this.splitContainerMain = new System.Windows.Forms.SplitContainer();
|
||||
this.listviewNodeDetails = new System.Windows.Forms.ListView();
|
||||
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.toolStripMain = new System.Windows.Forms.ToolStrip();
|
||||
this.toolbuttonOpenMib = new System.Windows.Forms.ToolStripButton();
|
||||
this.dialogOpenMib = new System.Windows.Forms.OpenFileDialog();
|
||||
((System.ComponentModel.ISupportInitialize)(this.splitContainerMain)).BeginInit();
|
||||
this.splitContainerMain.Panel1.SuspendLayout();
|
||||
this.splitContainerMain.Panel2.SuspendLayout();
|
||||
this.splitContainerMain.SuspendLayout();
|
||||
this.toolStripMain.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// treeMib
|
||||
//
|
||||
this.treeMib.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.treeMib.ImageIndex = 0;
|
||||
this.treeMib.ImageList = this.imagelistTreeNodeImages;
|
||||
this.treeMib.Location = new System.Drawing.Point(0, 0);
|
||||
this.treeMib.Name = "treeMib";
|
||||
this.treeMib.SelectedImageIndex = 0;
|
||||
this.treeMib.Size = new System.Drawing.Size(1028, 418);
|
||||
this.treeMib.TabIndex = 0;
|
||||
this.treeMib.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeMib_AfterSelect);
|
||||
//
|
||||
// imagelistTreeNodeImages
|
||||
//
|
||||
this.imagelistTreeNodeImages.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imagelistTreeNodeImages.ImageStream")));
|
||||
this.imagelistTreeNodeImages.TransparentColor = System.Drawing.Color.Transparent;
|
||||
this.imagelistTreeNodeImages.Images.SetKeyName(0, "ntimgContainer");
|
||||
this.imagelistTreeNodeImages.Images.SetKeyName(1, "ntimgTable");
|
||||
this.imagelistTreeNodeImages.Images.SetKeyName(2, "ntimgRow");
|
||||
this.imagelistTreeNodeImages.Images.SetKeyName(3, "ntimgColumn");
|
||||
this.imagelistTreeNodeImages.Images.SetKeyName(4, "ntimgScalar");
|
||||
this.imagelistTreeNodeImages.Images.SetKeyName(5, "ntimgUnknown");
|
||||
//
|
||||
// splitContainerMain
|
||||
//
|
||||
this.splitContainerMain.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.splitContainerMain.Location = new System.Drawing.Point(0, 25);
|
||||
this.splitContainerMain.Name = "splitContainerMain";
|
||||
this.splitContainerMain.Orientation = System.Windows.Forms.Orientation.Horizontal;
|
||||
//
|
||||
// splitContainerMain.Panel1
|
||||
//
|
||||
this.splitContainerMain.Panel1.Controls.Add(this.treeMib);
|
||||
//
|
||||
// splitContainerMain.Panel2
|
||||
//
|
||||
this.splitContainerMain.Panel2.Controls.Add(this.listviewNodeDetails);
|
||||
this.splitContainerMain.Size = new System.Drawing.Size(1028, 625);
|
||||
this.splitContainerMain.SplitterDistance = 418;
|
||||
this.splitContainerMain.TabIndex = 1;
|
||||
//
|
||||
// listviewNodeDetails
|
||||
//
|
||||
this.listviewNodeDetails.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
||||
this.columnHeader1,
|
||||
this.columnHeader2});
|
||||
this.listviewNodeDetails.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.listviewNodeDetails.FullRowSelect = true;
|
||||
this.listviewNodeDetails.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
|
||||
this.listviewNodeDetails.Location = new System.Drawing.Point(0, 0);
|
||||
this.listviewNodeDetails.Name = "listviewNodeDetails";
|
||||
this.listviewNodeDetails.Size = new System.Drawing.Size(1028, 203);
|
||||
this.listviewNodeDetails.TabIndex = 0;
|
||||
this.listviewNodeDetails.UseCompatibleStateImageBehavior = false;
|
||||
this.listviewNodeDetails.View = System.Windows.Forms.View.Details;
|
||||
//
|
||||
// columnHeader1
|
||||
//
|
||||
this.columnHeader1.Text = "";
|
||||
this.columnHeader1.Width = 150;
|
||||
//
|
||||
// columnHeader2
|
||||
//
|
||||
this.columnHeader2.Text = "";
|
||||
this.columnHeader2.Width = 777;
|
||||
//
|
||||
// toolStripMain
|
||||
//
|
||||
this.toolStripMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.toolbuttonOpenMib});
|
||||
this.toolStripMain.Location = new System.Drawing.Point(0, 0);
|
||||
this.toolStripMain.Name = "toolStripMain";
|
||||
this.toolStripMain.Size = new System.Drawing.Size(1028, 25);
|
||||
this.toolStripMain.TabIndex = 2;
|
||||
//
|
||||
// toolbuttonOpenMib
|
||||
//
|
||||
this.toolbuttonOpenMib.Image = ((System.Drawing.Image)(resources.GetObject("toolbuttonOpenMib.Image")));
|
||||
this.toolbuttonOpenMib.Name = "toolbuttonOpenMib";
|
||||
this.toolbuttonOpenMib.Size = new System.Drawing.Size(65, 22);
|
||||
this.toolbuttonOpenMib.Text = "Open...";
|
||||
this.toolbuttonOpenMib.Click += new System.EventHandler(this.toolbuttonOpenMib_Click);
|
||||
//
|
||||
// FormMain
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(1028, 650);
|
||||
this.Controls.Add(this.splitContainerMain);
|
||||
this.Controls.Add(this.toolStripMain);
|
||||
this.Name = "FormMain";
|
||||
this.Text = "MIB Viewer";
|
||||
this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
|
||||
this.splitContainerMain.Panel1.ResumeLayout(false);
|
||||
this.splitContainerMain.Panel2.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.splitContainerMain)).EndInit();
|
||||
this.splitContainerMain.ResumeLayout(false);
|
||||
this.toolStripMain.ResumeLayout(false);
|
||||
this.toolStripMain.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TreeView treeMib;
|
||||
private System.Windows.Forms.SplitContainer splitContainerMain;
|
||||
private System.Windows.Forms.ListView listviewNodeDetails;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader1;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader2;
|
||||
private System.Windows.Forms.ImageList imagelistTreeNodeImages;
|
||||
private System.Windows.Forms.ToolStrip toolStripMain;
|
||||
private System.Windows.Forms.ToolStripButton toolbuttonOpenMib;
|
||||
private System.Windows.Forms.OpenFileDialog dialogOpenMib;
|
||||
}
|
||||
}
|
||||
|
||||
217
contrib/apps/LwipMibCompiler/MibViewer/FormMain.cs
Normal file
217
contrib/apps/LwipMibCompiler/MibViewer/FormMain.cs
Normal file
@@ -0,0 +1,217 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System.Windows.Forms;
|
||||
using Lextm.SharpSnmpLib.Mib;
|
||||
using Lextm.SharpSnmpLib.Mib.Elements;
|
||||
using Lextm.SharpSnmpLib.Mib.Elements.Types;
|
||||
using Lextm.SharpSnmpLib.Mib.Elements.Entities;
|
||||
using System.IO;
|
||||
|
||||
namespace LwipMibViewer
|
||||
{
|
||||
public partial class FormMain : Form
|
||||
{
|
||||
readonly ListViewGroup listviewgroupAbstract;
|
||||
readonly ListViewGroup listviewgroupElement;
|
||||
readonly ListViewGroup listviewgroupBaseType;
|
||||
readonly ListViewGroup listviewgroupTypeChain;
|
||||
|
||||
public FormMain()
|
||||
{
|
||||
this.Font = SystemInformation.MenuFont;
|
||||
InitializeComponent();
|
||||
|
||||
this.listviewgroupAbstract = new ListViewGroup("Abstract", System.Windows.Forms.HorizontalAlignment.Left);
|
||||
this.listviewgroupElement = new ListViewGroup("Element Properties", System.Windows.Forms.HorizontalAlignment.Left);
|
||||
this.listviewgroupBaseType = new ListViewGroup("Element Base Type", System.Windows.Forms.HorizontalAlignment.Left);
|
||||
this.listviewgroupTypeChain = new ListViewGroup("Element Type Chain", System.Windows.Forms.HorizontalAlignment.Left);
|
||||
this.listviewNodeDetails.Groups.AddRange(new System.Windows.Forms.ListViewGroup[] {
|
||||
listviewgroupAbstract,
|
||||
listviewgroupElement,
|
||||
listviewgroupBaseType,
|
||||
listviewgroupTypeChain});
|
||||
|
||||
try
|
||||
{
|
||||
DirectoryInfo dirInfo = new DirectoryInfo(Path.GetDirectoryName(Application.ExecutablePath));
|
||||
if (dirInfo != null)
|
||||
{
|
||||
dirInfo = dirInfo.Parent;
|
||||
if (dirInfo != null)
|
||||
{
|
||||
dirInfo = dirInfo.Parent;
|
||||
if (dirInfo != null)
|
||||
{
|
||||
dirInfo = new DirectoryInfo(Path.Combine(dirInfo.FullName, "Mibs"));
|
||||
if (dirInfo.Exists)
|
||||
{
|
||||
MibTypesResolver.RegisterResolver(new FileSystemMibResolver(dirInfo.FullName, true));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
}
|
||||
|
||||
#region GUI Event Handler
|
||||
|
||||
private void toolbuttonOpenMib_Click(object sender, System.EventArgs e)
|
||||
{
|
||||
if (this.dialogOpenMib.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
OpenMib(this.dialogOpenMib.FileName);
|
||||
}
|
||||
}
|
||||
|
||||
private void treeMib_AfterSelect(object sender, TreeViewEventArgs e)
|
||||
{
|
||||
listviewNodeDetails.Items.Clear();
|
||||
|
||||
if (e.Node != null)
|
||||
{
|
||||
MibTreeNode mtn = e.Node.Tag as MibTreeNode;
|
||||
if (mtn != null)
|
||||
{
|
||||
listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "Abstract", mtn.NodeType.ToString() }, this.listviewgroupAbstract));
|
||||
|
||||
listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "Module", (mtn.Entity.Module != null) ? mtn.Entity.Module.Name : "" }, this.listviewgroupElement));
|
||||
listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "Type", mtn.Entity.GetType().Name }, this.listviewgroupElement));
|
||||
listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "Name", mtn.Entity.Name }, this.listviewgroupElement));
|
||||
listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "Description", mtn.Entity.Description }, this.listviewgroupElement));
|
||||
listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "OID", mtn.Entity.Value.ToString() }, this.listviewgroupElement));
|
||||
listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "Full OID", MibTypesResolver.ResolveOid(mtn.Entity).GetOidString() }, this.listviewgroupElement));
|
||||
if (mtn.Entity is ObjectType)
|
||||
{
|
||||
listviewNodeDetails.Items.Add(new ListViewItem(new string[] { "Access", (mtn.Entity as ObjectType).Access.ToString() }, this.listviewgroupElement));
|
||||
}
|
||||
|
||||
ITypeReferrer tr = mtn.Entity as ITypeReferrer;
|
||||
if (tr != null)
|
||||
{
|
||||
ShowTypeDetails(listviewNodeDetails, this.listviewgroupBaseType, tr.BaseType);
|
||||
ShowTypeChain(listviewNodeDetails, tr.ReferredType);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
private void OpenMib(string file)
|
||||
{
|
||||
try
|
||||
{
|
||||
MibDocument md = new MibDocument(file);
|
||||
MibTypesResolver.ResolveTypes(md.Modules[0]);
|
||||
|
||||
this.treeMib.Nodes.Clear();
|
||||
this.listviewNodeDetails.Items.Clear();
|
||||
|
||||
MibTree mt = new MibTree(md.Modules[0] as MibModule);
|
||||
foreach (MibTreeNode mibTreeNode in mt.Root)
|
||||
{
|
||||
AddNode(mibTreeNode, this.treeMib.Nodes);
|
||||
|
||||
foreach (TreeNode node in this.treeMib.Nodes)
|
||||
{
|
||||
node.Expand();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
private void AddNode(MibTreeNode mibNode, TreeNodeCollection parentNodes)
|
||||
{
|
||||
int imgIndex = 5; //unknown
|
||||
if ((mibNode.NodeType & MibTreeNodeType.Table) != 0)
|
||||
{
|
||||
imgIndex = 1;
|
||||
}
|
||||
else if ((mibNode.NodeType & MibTreeNodeType.TableRow) != 0)
|
||||
{
|
||||
imgIndex = 2;
|
||||
}
|
||||
else if ((mibNode.NodeType & MibTreeNodeType.TableCell) != 0)
|
||||
{
|
||||
imgIndex = 3;
|
||||
}
|
||||
else if ((mibNode.NodeType & MibTreeNodeType.Scalar) != 0)
|
||||
{
|
||||
imgIndex = 4;
|
||||
}
|
||||
else if ((mibNode.NodeType & MibTreeNodeType.Container) != 0)
|
||||
{
|
||||
imgIndex = 0;
|
||||
}
|
||||
|
||||
TreeNode newNode = new TreeNode(mibNode.Entity.Name, imgIndex, imgIndex);
|
||||
newNode.Tag = mibNode;
|
||||
|
||||
parentNodes.Add(newNode);
|
||||
|
||||
foreach (MibTreeNode child in mibNode.ChildNodes)
|
||||
{
|
||||
AddNode(child, newNode.Nodes);
|
||||
}
|
||||
}
|
||||
|
||||
private void ShowTypeChain(ListView lv, ITypeAssignment type)
|
||||
{
|
||||
ShowTypeDetails(lv, this.listviewgroupTypeChain, type);
|
||||
|
||||
ITypeReferrer tr = type as ITypeReferrer;
|
||||
if ((tr != null) && (tr.ReferredType != null))
|
||||
{
|
||||
lv.Items.Add(new ListViewItem(new string[] { " >>>", "" }, this.listviewgroupTypeChain));
|
||||
ShowTypeChain(listviewNodeDetails, tr.ReferredType);
|
||||
}
|
||||
}
|
||||
|
||||
private void ShowTypeDetails(ListView lv, ListViewGroup lvg, ITypeAssignment type)
|
||||
{
|
||||
lv.Items.Add(new ListViewItem(new string[] { "Module", (type.Module != null) ? type.Module.Name : "" }, lvg));
|
||||
lv.Items.Add(new ListViewItem(new string[] { "Type", type.GetType().Name }, lvg));
|
||||
lv.Items.Add(new ListViewItem(new string[] { "Name", type.Name }, lvg));
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
298
contrib/apps/LwipMibCompiler/MibViewer/FormMain.resx
Normal file
298
contrib/apps/LwipMibCompiler/MibViewer/FormMain.resx
Normal file
@@ -0,0 +1,298 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="imagelistTreeNodeImages.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<data name="imagelistTreeNodeImages.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>
|
||||
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
|
||||
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
||||
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABo
|
||||
IQAAAk1TRnQBSQFMAgEBBgEAARABAAEQAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
|
||||
AwABIAMAAQEBAAEgBgABIBIAAwQBBQMWAR4DIgEyAzEBTwJGAUQBhwMvAUsDHgErAxsBJgMYASIDFQEd
|
||||
AxIBGAMNARIDCgENAwcBCQMEAQUDAQECAwQBBQMWAR4DIgEyAzEBTgJGAUQBhwMvAUsDHgErAxsBJgMb
|
||||
ASYDIQExAyEBMAMdASoDGwEmAxgBIQMLAQ8DAQECgAADAgEDAwwBEAMrAUMCRgFEAYIC/wHwAf8CRgFE
|
||||
AYIDKgFAAw8BFAMNAREDCwEPAwkBDAMHAQoDBQEHAwQBBQMCAQMDAAEBAwIBAwMLAQ8DKwFDAkYBRAGC
|
||||
Av8B8AH/AkYBRAGCAyoBQAMOARMDEgEZAT0COwFpAVwBRQFCAawBZwE+AToBxAFaAUUBQwGqATwBOwE6
|
||||
AWYDEAEWAwABAYQAAx4BKwJEAUIBewL/AfAB/wLpAdoD/wHxAf8CRAFCAXsDHgErJAADHgErAkQBQgF7
|
||||
Av8B8AH/AukB2gP/AfEB/wJEAUIBewMeASsBLgItAUcBdwFHATwByQG7AVQBPQHxA+4B/wG7AVMBPAHx
|
||||
AXcBRgE8AckBLgItAUeEAAMdASoCRAFCAXcC/wHwAf8B6wHdAbEB/wH3AcEBNwH/Ae0B3wGzA/8B8gH/
|
||||
AkQBQgF3Ax0BKhwAAx0BKgJEAUIBdwL/AfAB/wLpAdoB/wLqAdwB/wLrAd4D/wHyAf8CRAFCAXcBZAFJ
|
||||
AUIBrwG2AVkBQQHxAc0BVAEyAf8BvQF5AWIB/wHFAVABLgH/AbEBUQE1AfEBXAFIAUQBn4QAAkMBQQF2
|
||||
Av8B8AH/AukB2gH/AecBqwEhAf8B5wGrASEB/wHnAasBIQH/AeoB2wGwA/8B9AH/AkMBQQF2Ax0BKhgA
|
||||
AkMBQQF2Av8B8AH/AukB2gH/AuoB3AH/AusB3gH/AuwB3wH/Au0B4QP/AfQB/wGAAUQBMQHaAc4BcAFN
|
||||
AfwBugFMASoB/wPSAf8BvgGLAXgB/wG7AVIBMgH8AW8BSQE/AbqEAAMdASkCQwFBAXQC/wHxAf8B5wHX
|
||||
AasB/wHXAZYBDAH/AdcBlgEMAf8B1wGWAQwB/wHoAdgBrgP/AfUB/wJDAUEBdAMdASkUAAMdASkCQwFB
|
||||
AXQC/wHxAf8C6wHeAf8C7AHfAf8C7QHhAf8C7gHjAf8C7wHlAf8BzQF5AV4B/wHOAXcBWAH3AbwBVAEy
|
||||
Af8BtAFMASoB/wPmAf8BtwFlAUsB8AFdAUkBRAGdiAADHQEpAkIBQQFyAv8B8gH/AeUB1AGpAf8BzQGJ
|
||||
AQAB/wHNAYkBAAH/Ac0BiQEAAf8B6AHXAa8D/wH3Af8CQgFBAXIDHAEoFAADHQEpAkIBQQFyAv8B8gH/
|
||||
Au0B4QH/Au4B4wH/Au8B5QH/AvAB5wH/AeABuwGqAf8BzgFpAUgB/wHjAcsBwQH5BP8B3gHHAb0B9QF+
|
||||
AU8BQgHEAi0BLAFFjAADHAEoAkEBQAFxAv8B9AH/AecB1gGsAf8B0QGOAQQB/wHRAY4BBAH/AdEBjgEE
|
||||
Af8B7AHbAbMD/wH4Af8CQQFAAXEDHAEoFAADHAEoAkEBQAFxAv8B9AH/Au8B5QH/AvAB5wH/AvEB6QH/
|
||||
AvMB6gH/AeQBvgGsAf8B1AGBAWIB/wGGAUoBNAHXAWYBTQFEAaoCLQEsAUWUAAMcAScCQQFAAW8C/wH1
|
||||
Af8B7AHcAbMB/wHfAaEBFwH/Ad8BoQEXAf8B3wGhARcB/wHxAeIBuwP/AfoB/wJBAUABbwMcAScUAAMc
|
||||
AScCQQFAAW8C/wH1Af8C8QHpAf8C8wHqAf8C9AHsAf8C9QHuAf8C9gHwA/8B+gH/AkEBQAFvAxwBJ5gA
|
||||
AxwBJwJAAT8BbQL/AfcB/wHyAeMBuwH/AfABuAEuAf8B8AG4AS4B/wHwAbgBLgH/AvgB9AP/AfsB/wJA
|
||||
AT8BbQMcAScUAAMcAScCQAE/AW0C/wH3Af8C9AHsAf8C9QHuAf8C9gHwAf8C9wHyAf8C+AH0A/8B+wH/
|
||||
AkABPwFtAxwBJ5gAAxsBJgJAAT8BbAL/AfgB/wH3AeoBwwH/Af0ByQE/Af8B+QHsAccB/wL7AfcB/wL8
|
||||
AfkD/wH8Af8CQAE/AWwDGwEmFAADGwEmAkABPwFsAv8B+AH/AvYB8AH/AvcB8gH/AvgB9AH/AvsB9wH/
|
||||
AvwB+QP/AfwB/wJAAT8BbAMbASaYAAMbASYCPwE+AWsC/wH6Af8C+AH0Af8C+wH3Af8C3wHVAf8CyQG5
|
||||
Af8C4AHWA/8B/gH/Aj8BPgFrGAADGwEmAj8BPgFrAv8B+gH/AvgB9AH/AvsB9wH/At8B1QH/AskBuQH/
|
||||
AuAB1gP/Af4B/wI/AT4Ba5wAAxoBJQI/AT0BaQL/AfsB/wL8AfkB/wK8AawB/wQAArwBrAP/Af4B/wI/
|
||||
AT0BaRwAAxoBJQI/AT0BaQL/AfsB/wL8AfkB/wK8AawB/wQAArwBrAP/Af4B/wI/AT0BaaAAAxoBJQI+
|
||||
AT0BaAL/AfwB/wLLAcEB/wKgAZAB/wLLAcED/wH+Af8CPgE9AWggAAMaASUCPgE9AWgC/wH8Af8CywHB
|
||||
Af8CoAGQAf8CywHBA/8B/gH/Aj4BPQFopAADGgElAj4BPQFnAv8B/gP/Af4D/wH+Bf8CPgE9AWckAAMa
|
||||
ASUCPgE9AWcC/wH+A/8B/gP/Af4F/wI+AT0BZ6gAAxoBJAI+AT0BZgI+AT0BZgI+AT0BZgI+AT0BZgMx
|
||||
AU0oAAMaASQCPgE9AWYCPgE9AWYCPgE9AWYCPgE9AWYDMQFNlAADIQEwAUABRgFIAXwBQwFOAVIBkgMF
|
||||
AQccAAMHAQkDEAEWAxMBGgMTARoDEwEaAxMBGgMTARoDEwEaAxMBGgMTARoDEwEaAxMBGgMTARoDEwEa
|
||||
AxABFgMHAQkDBwEJAxABFgMTARoDEwEaAxMBGgMTARoDEwEaAxMBGgMTARoDEwEaAxMBGgMTARoDEwEa
|
||||
AxMBGgMQARYDBwEJAwcBCQMQARYDEwEaAxMBGgMTARoDEwEaAxMBGgMTARoDEwEaAxMBGgMTARoDEwEa
|
||||
AxMBGgMTARoDEAEWAwcBCQwAAjIBMwFQAUMBUQFXAZkBRQFkAXQBwAFYAYsBogHgATwBWAFqAcEDEwEa
|
||||
AwUBBxgAAjwBOwFpAkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGH
|
||||
AkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGHAjwBOwFpAjkBNAFpAkABNwGHAkABNwGH
|
||||
AkABNwGHAkABNwGHAkABNwGHAkABNwGHAkABNwGHAkABNwGHAkABNwGHAkABNwGHAkABNwGHAkABNwGH
|
||||
AkABNwGHAkABNwGHAjkBNAFpAjwBOwFpAkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGH
|
||||
AkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGHAkYBRAGHAjwBOwFpAw0BEQMa
|
||||
ASQBRAFNAVEBmAE8AYkBrAHyAWcBrwHTAfoBggHLAewB/wGFAc4B7gH/ARUBWwGCAe8BOgFXAWYBxAE6
|
||||
AVcBZgHEAT4BWgFqAb4BPgFaAWoBvgE+AVoBagG+AUQBTQFRAZgDGgEkAw0BEQJGAUMBgQL5AekB/wLz
|
||||
AeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLz
|
||||
AeIB/wLzAeIB/wL5AekB/wJGAUMBgQJDAToBgQL5AekB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLz
|
||||
AeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wL5AekB/wJDAToBgQJG
|
||||
AUMBgQL5AekB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLzAeIB/wLz
|
||||
AeIB/wLzAeIB/wLzAeIB/wLzAeIB/wL5AekB/wJGAUMBgQMHAQkDDQESAUIBWwFmAbIBiAHQAe8B/wF9
|
||||
AcoB6QH/AX0BygHpAf8BhwHQAe8B/wEkAXsBqQH/AX0BvAHbAf8BfQG8AdsB/wGNAdEB8wH/AY0B0QHz
|
||||
Af8BkAHUAfUB/wFCAVsBZgGyATACMQFNAwcBCQJEAUMBegL0AeQC/wHMAUIB/wH+AcsBQQH/AewB0gGG
|
||||
Af8C2gHJAf8C2AHHAf8C1gHFAf8C1AHDAf8C0wHCAf8C0QHAAf8CzwG+Af8CzgG9Af8CzQG8Af8C9AHk
|
||||
Af8CRAFDAXoCRgE+AXoC9AHkAv8BzAFDAf8B/gHLAUIB/wHsAdIBhgH/AtoByQH/AtgBxwH/AtYBxQH/
|
||||
AtQBwwH/AtMBwgH/AtEBwAH/As8BvgH/As4BvQH/As0BvAH/AvQB5AH/AkYBPgF6AkQBQwF6AvQB5AL/
|
||||
AcwBQgH/Af4BywFBAf8B7AHSAYYB/wLaAckB/wLYAccB/wHnAWEBPwH/AecBYQE/Af8B5wFhAT8B/wHn
|
||||
AWEBPwH/As8BvgH/As4BvQH/As0BvAH/AvQB5AH/AkQBQwF6CAABQwFXAWABpAGKAdMB8AH/AYIBzQHr
|
||||
Af8BggHNAesB/wGKAdMB8AH/ASQBfAGrAf8BegG5AdgB/wF6AbkB2AH/AYoBzgHwAf8BigHOAfAB/wGP
|
||||
AdMB9AH/AfQBtgEsAf8BQwFXAWABpAQAAkQBQgF3AvUB5gL/AcwBQgL/Ae4BiAH/AewB0gGGAf8C9QHu
|
||||
Af8C9QHuAf8C1gHFAf8C9QHuAf8C9QHuAf8C0QHAAf8C9QHuAf8C9QHuAf8CzQG8Af8C9QHmAf8CRAFC
|
||||
AXcCRwE/AXcC9QHmAv8BzAFDAv8B7gGIAf8B7AHSAYYB/wL1Ae4B/wL1Ae4B/wLWAcUB/wL1Ae4B/wL1
|
||||
Ae4B/wLRAcAB/wL1Ae4B/wL1Ae4B/wLNAbwB/wL1AeYB/wJHAT8BdwJEAUIBdwL1AeYC/wHMAUIC/wHu
|
||||
AYgB/wHsAdIBhgH/AvUB7gH/AvUB7gH/AdkBWAE2Af8B8gHJAbgB/wHyAckBuAH/AdkBWAE2Af8C9QHu
|
||||
Af8C9QHuAf8CzQG8Af8C9QHmAf8CRAFCAXcIAAFDAVUBXgGeAY4B1gHyAf8BhwHQAe0B/wGHAdAB7QH/
|
||||
AY4B1gHyAf8BJgGCAa8B/wF7AboB2AH/AXsBugHYAf8BiwHPAfEB/wGLAc8B8QH/AZEB1QH1Af8B/gHJ
|
||||
AT8B/wFDAVUBXgGeBAACQwFBAXUC9gHpAv8BzAFCAf8B/gHLAUEB/wHsAdIBhgH/AtoByQH/AtgBxwH/
|
||||
AtwBzAH/AtQBwwH/AtMBwgH/AtgByAH/As8BvgH/As4BvQH/As0BvAH/AvYB6QH/AkMBQQF1AkcBPwF1
|
||||
AvYB6QL/AcwBQwH/Af4BywFCAf8B7AHSAYYB/wLaAckB/wLYAccB/wLcAcwB/wLUAcMB/wLTAcIB/wLY
|
||||
AcgB/wLPAb4B/wLOAb0B/wLNAbwB/wL2AekB/wJHAT8BdQJDAUEBdQL2AekC/wHMAUIB/wH+AcsBQQH/
|
||||
AewB0gGGAf8C2gHJAf8C2AHHAf8ByAFPAS0B/wHeAbYBngH/Ad4BtQGdAf8ByAFPAS0B/wLPAb4B/wLO
|
||||
Ab0B/wLNAbwB/wL2AekB/wJDAUEBdQgAAUQBVQFdAZsBkgHaAfQB/wGLAdQB8AH/AYsB1AHwAf8BkgHa
|
||||
AfQB/wEpAYUBswH/AX0BvAHaAf8BfQG8AdoB/wGNAdEB8wH/AY0B0QHzAf8BkwHXAfYB/wLrAd0B/wFE
|
||||
AVUBXQGbBAACQgFBAXMC9wHrAv8BzAFCAv8B7gGIAf8B7AHSAYYB/wL3AfEB/wL3AfEB/wLWAcUB/wL3
|
||||
AfEB/wL3AfEB/wLRAcAB/wL3AfEB/wL3AfEB/wLNAbwB/wL3AesB/wJCAUEBcwJHAT8BcwL3AesC/wHM
|
||||
AUMC/wHuAYgB/wHsAdIBhgH/AvcB8QH/AvcB8QH/AtYBxQH/AvcB8QH/AvcB8QH/AtEBwAH/AvcB8QH/
|
||||
AvcB8QH/As0BvAH/AvcB6wH/AkcBPwFzAkIBQQFzAvcB6wL/AcwBQgL/Ae4BiAH/AewB0gGGAf8C9wHx
|
||||
Af8C9wHxAf8BuAFHASUB/wHzAcsBuQH/AfMBywG5Af8BuAFHASUB/wL3AfEB/wL3AfEB/wLNAbwB/wL3
|
||||
AesB/wJCAUEBcwgAAUQBUwFbApcB3gH2Af8BkAHYAfIB/wGQAdgB8gH/AZcB3gH2Af8BKwGJAbcB/wGA
|
||||
Ab0B3AH/AYABvQHcAf8BjwHTAfUB/wGPAdMB9QH/AZUB2QH4Af8C9QHuAf8BRAFTAVsBlwQAAkIBQQFy
|
||||
AvgB7gL/AcwBQgH/Af4BywFBAf8B7AHSAYYB/wLaAckB/wLYAccB/wLdAc4B/wLUAcMB/wLTAcIB/wLZ
|
||||
AcoB/wLPAb4B/wLOAb0B/wLNAbwB/wL4Ae4B/wJCAUEBcgJIAUABcgL4Ae4B/wHsAYYBYwH/AeIBewFZ
|
||||
Af8B1AFuAUwB/wHEAWABPgH/AbYBUgEwAf8BrQFHASUB/wGrAUMBIQH/AbEBRAEiAf8BvQFKASgB/wHM
|
||||
AVIBMAH/AdsBWgE4Af8B6AFiAUAB/wL4Ae4B/wJIAUABcgJCAUEBcgL4Ae4C/wHMAUIB/wH+AcsBQQH/
|
||||
AewB0gGGAf8C2gHJAf8C2AHHAf8BrQFCASAB/wHeAbYBngH/Ad4BtQGdAf8BrQFCASAB/wLPAb4B/wLO
|
||||
Ab0B/wLNAbwB/wL4Ae4B/wJCAUEBcggAAUQBUwFaAZQBmwHhAfcB/wGUAdsB9AH/AZQB2wH0Af8BmwHh
|
||||
AfcB/wEuAY0BvAH/AYEBvgHdAf8BgQG+Ad0B/wGQAdQB9gH/AZAB1AH2Af8BlwHbAfkB/wL+Af0B/wFE
|
||||
AVMBWgGUBAACQQFAAXAC+QHxAv8BzAFCAv8B7gGIAf8B7AHSAYYB/wL5AfUB/wL5AfUB/wLWAcUB/wL5
|
||||
AfUB/wL5AfUB/wLRAcAB/wL5AfUB/wL5AfUB/wLNAbwB/wL5AfEB/wJBAUABcAJHAUABcAL5AfEB/wHs
|
||||
AYYBYwH/AfgBxQF5Af8B7QG1AXgB/wH1AcwBvAH/AfUBzAG8Af8B4AG3AZ8B/wH1AcwBvAH/AfUBzAG8
|
||||
Af8B3QG0AZwB/wH1AcwBvAH/AfUBzAG8Af8B6AFiAUAB/wL5AfEB/wJHAUABcAJBAUABcAL5AfEC/wHM
|
||||
AUIC/wHuAYgB/wHsAdIBhgH/AvkB9QH/AvkB9QH/AasBRAEiAf8B9QHMAbwB/wH1AcwBvAH/AasBRAEi
|
||||
Af8C+QH1Af8C+QH1Af8CzQG8Af8C+QHxAf8CQQFAAXAIAAFEAVEBVwGQAZ4B5QH5Af8BmAHfAfYB/wGY
|
||||
Ad8B9gH/AZ4B5QH5Af8BMAGQAcAB/wGDAcAB3wH/AYMBwAHfAf8BkgHWAfgB/wGSAdYB+AH/AZkB3QH6
|
||||
Af8BRAFRAVcBkAMjATMEAAJBAUABbgL7AfQC/wHMAUIB/wH+AcsBQQH/AewB0gGGAf8C2gHJAf8C2AHH
|
||||
Af8C3gHQAf8C1AHDAf8C0wHCAf8C2gHMAf8CzwG+Af8CzgG9Af8CzQG8Af8C+wH0Af8CQQFAAW4CRwFA
|
||||
AW4C+wH0Af8B7AGGAWMB/wHiAXsBWQH/AdQBbgFMAf8BxAFgAT4B/wG2AVIBMAH/Aa0BRwElAf8BqwFD
|
||||
ASEB/wGxAUQBIgH/Ab0BSgEoAf8BzAFSATAB/wHbAVoBOAH/AegBYgFAAf8C+wH0Af8CRwFAAW4CQQFA
|
||||
AW4C+wH0Av8BzAFCAf8B/gHLAUEB/wHsAdIBhgH/AtoByQH/AtgBxwH/AbIBTAEqAf8B3gG2AZ4B/wHe
|
||||
AbUBnQH/AbIBTAEqAf8CzwG+Af8CzgG9Af8CzQG8Af8C+wH0Af8CQQFAAW4IAAFDAU8BVQGNAaMB6AH7
|
||||
Af8BnQHjAfkB/wGdAeMB+QH/AaMB6AH7Af8BMwGUAcUB/wGFAcIB4QH/AYUBwgHhAf8BlAHYAfoB/wGU
|
||||
AdgB+gH/AZsB3wH8Af8BQwFPAVUBjQgAAkABPwFtAvwB9wL/AcwBQgL/Ae4BiAH/AewB0gGGAf8C/AH6
|
||||
Af8C/AH6Af8C1gHFAf8C/AH6Af8C/AH6Af8C0QHAAf8C/AH6Af8C/AH6Af8CzQG8Af8C/AH3Af8CQAE/
|
||||
AW0CRwFAAW0C/AH3Av8BzAFDAv8B7gGIAf8B7AHSAYYB/wL8AfoB/wL8AfoB/wLWAcUB/wL8AfoB/wL8
|
||||
AfoB/wLRAcAB/wL8AfoB/wL8AfoB/wLNAbwB/wL8AfcB/wJHAUABbQJAAT8BbQL8AfcC/wHMAUIC/wHu
|
||||
AYgB/wHsAdIBhgH/AvwB+gH/AvwB+gH/AcABWgE4Af8B9gHOAb8B/wH2Ac4BvwH/AcABWgE4Af8C/AH6
|
||||
Af8C/AH6Af8CzQG8Af8C/AH3Af8CQAE/AW0IAAFDAU8BVAGKAaYB6wH8Af8BoQHmAfsB/wGhAeYB+wH/
|
||||
AaYB6wH8Af8BOgGdAc8B/wGHAcQB4gH/AYcBxAHiAf8BlgHaAfwB/wGWAdoB/AH/AZ4B4gH9Af8BQwFP
|
||||
AVQBiggAAj8BPgFrAv0B+QL/AcwBQgH/Af4BywFBAf8B9QHOAWIB/wHrAdIBhQH/AekB0AGDAf8B5wHO
|
||||
AYEB/wHlAcwBgAH/AeQBywF8Af8B4gHJAXoB/wHgAccBeAH/Ad8BxgF3Af8B3gHFAXYB/wL9AfkB/wI/
|
||||
AT4BawJHAUABawL9AfkC/wHMAUMB/wH+AcsBQgH/AfUBzgFjAf8B6wHSAYUB/wHpAdABgwH/AecBzgGB
|
||||
Af8B5QHMAYAB/wHkAcsBfQH/AeIByQF7Af8B4AHHAXkB/wHfAcYBeAH/Ad4BxQF3Af8C/QH5Af8CRwFA
|
||||
AWsCPwE+AWsC/QH5Av8BzAFCAf8B/gHLAUEB/wH1Ac4BYgH/AesB0gGFAf8B6QHQAYMB/wHRAWoBSAH/
|
||||
AekBsQF0Af8B6AGwAXMB/wHRAWoBSAH/AeABxwF4Af8B3wHGAXcB/wHeAcUBdgH/Av0B+QH/Aj8BPgFr
|
||||
CAABQgFNAVIBhwGpAe4B/QH/AaQB6QH8Af8BpAHpAfwB/wGqAe8B/QH/AUABoQHRAf8BkAHRAfEB/wGW
|
||||
AdoB+wH/AZcB2wH9Af8BlwHbAf0B/wGfAeMB/gH/AUIBTQFSAYcIAAI/AT4BagL+AfwC/wHMAUIC/wHu
|
||||
AYgB/wH9AcoBQAH/AfwB6wGFAf8B+wHqAYQB/wH4AcUBOwH/AfYB5QF9Af8B9AHjAXsB/wHzAcABNgH/
|
||||
AfEB4AF4Af8B7wHeAXYB/wHvAbwBMgH/Av4B/AH/Aj8BPgFqAkcBQAFqAv4B/AL/AcwBQwL/Ae4BiAH/
|
||||
Af0BygFBAf8B/AHrAYUB/wH7AeoBhAH/AfgBxQE8Af8B9gHlAX4B/wH0AeMBfAH/AfMBwAE3Af8B8QHg
|
||||
AXkB/wHvAd4BdwH/Ae8BvAEzAf8C/gH8Af8CRwFAAWoCPwE+AWoC/gH8Av8BzAFCAv8B7gGIAf8B/QHK
|
||||
AUAB/wH8AesBhQH/AfsB6gGEAf8B4QF5AVcB/wHzAcABcwH/AfIBvwFyAf8B4QF5AVcB/wHxAeABeAH/
|
||||
Ae8B3gF2Af8B7wG8ATIB/wL+AfwB/wI/AT4BaggAAUMBTAFSAYUBrQHxAv8BqwHvAf4B/wGVAeIB+AH/
|
||||
AWwByQHtAf8BRgGpAdkB/wGYAdwB/gH/AZgB3AH+Af8BmAHcAf4B/wGYAdwB/gH/AaEB5QL/AUMBTAFS
|
||||
AYUIAAI+AT0BaAL/Af4C/wHMAUIB/wH+AcsBQQH/Af0BygFAAf8B/AHJAT8B/wH6AccBPQH/AfgBxQE7
|
||||
Af8B9gHDAToB/wH1AcIBOAH/AfMBwAE2Af8B8QG+ATQB/wHwAb0BMwH/Ae8BvAEyA/8B/gH/Aj4BPQFo
|
||||
AkcBQAFoAv8B/gL/AcwBQwH/Af4BywFCAf8B/QHKAUEB/wH8AckBQAH/AfoBxwE+Af8B+AHFATwB/wH2
|
||||
AcMBOwH/AfUBwgE5Af8B8wHAATcB/wHxAb4BNQH/AfABvQE0Af8B7wG8ATMD/wH+Af8CRwFAAWgCPgE9
|
||||
AWgC/wH+Av8BzAFCAf8B/gHLAUEB/wH9AcoBQAH/AfwByQE/Af8B+gHHAT0B/wHsAYYBYgH/AewBhgFi
|
||||
Af8B7AGGAWIB/wHsAYYBYgH/AfEBvgE0Af8B8AG9ATMB/wHvAbwBMgP/Af4B/wI+AT0BaAgAAUMBTAFQ
|
||||
AYMBiAHcAfQB/wFeAcAB6QH/AV0BvwHqAf8BgAHTAfQB/wGcAeMB/QH/AaIB5gL/AaIB5gL/AaIB5gL/
|
||||
AaIB5gL/AaYB6gL/AUMBTAFQAYMIAAI+AT0BZzj/Aj4BPQFnAkcBQAFnOP8CRwFAAWcCPgE9AWc4/wI+
|
||||
AT0BZwgAATkBOwE9AWEBQgFLAU8BgQFCAUsBTwGBAUIBSwFPAYEBQgFLAU8BgQFCAUsBTwGBAUIBSwFP
|
||||
AYEBQgFLAU8BgQFCAUsBTwGBAUIBSwFPAYEBQgFLAU8BgQE5ATsBPQFhCAADMQFNAj4BPQFmAj4BPQFm
|
||||
Aj4BPQFmAj4BPQFmAj4BPQFmAj4BPQFmAj4BPQFmAj4BPQFmAj4BPQFmAj4BPQFmAj4BPQFmAj4BPQFm
|
||||
Aj4BPQFmAj4BPQFmAzEBTQI3ATQBTQJHAUABZgJHAUABZgJHAUABZgJHAUABZgJHAUABZgJHAUABZgJH
|
||||
AUABZgJHAUABZgJHAUABZgJHAUABZgJHAUABZgJHAUABZgJHAUABZgJHAUABZgI3ATQBTQMxAU0CPgE9
|
||||
AWYCPgE9AWYCPgE9AWYCPgE9AWYCPgE9AWYCPgE9AWYCPgE9AWYCPgE9AWYCPgE9AWYCPgE9AWYCPgE9
|
||||
AWYCPgE9AWYCPgE9AWYCPgE9AWYDMQFNAUIBTQE+BwABPgMAASgDAAFAAwABIAMAAQEBAAEBBgABARYA
|
||||
A/8RAAGAAf8BgAEBBQABfwEAAQEFAAE/AQABAQUAAR8BAAEBBAABgAEPAYABAQQAAcABBwHAAQMEAAHg
|
||||
AQMB4AEDBAAB8AEBAfABAQQAAfgBAAH4BQAB/AEAAfwFAAH+AQgB/gEIBAAB/wEAAf8FAAH/AYAB/wGA
|
||||
BAAB/wHAAf8BwAQAAfgBfwYAAeABPxYAAcABAQYAAcABAQYAAcABAQYAAcABAQYAAcABAQYAAcABAQYA
|
||||
AcABAwYAAcABAwYAAcABAwYAAcABAwYAAcABAwYAAcABAwYACw==
|
||||
</value>
|
||||
</data>
|
||||
<metadata name="toolStripMain.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>211, 17</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="toolbuttonOpenMib.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAK6SURBVDhPjZNbSNNRHMfPU9DtwR71oZf5IgkF0YMEEYb2
|
||||
EGgG5YNgGQmGSUoYimbel5KKmlM0u3jJSpv3ad7WnGkzb2yO4bByF3WuuTnnnLv47Zw/9YclQQc+/L//
|
||||
P+d8/r/f+Z8/Ib/HjJDcmhaS3P+Bzf2zjr8qiki+QyuE6dNNbIzFw6F8DJ++AVh97c9GK9jcA4LJAlKI
|
||||
rQ7sW9/DpauGZSoFg6JwfJSU+TE0XIXOgqCaAwJ5ASn2bb6F19TM4bO+w4z4HgwWC9YcDugpK3Y7umQy
|
||||
FOZEDMRkZQX7SWS5pMRrboVn9RUHy1/aEqDSajGn0WDZbIZ6bQ0t/f1gIzojI8lPMvaIPPWsN2FP/5yD
|
||||
ZdmLWLwUi/FhZASSqSlOUtXczBMcGZnFVzGUTSr2jI1wfq/lYHms4Tqkc3MYnZ2F0mDAqs3GV8LaiUhN
|
||||
TeYFA5mkenelHg5tNQfLw3UxaOrpQZdUiu7xca5/Mc0do6PQb28jPDk5hRf0PiQi5zcR7JoKDpYHaqIg
|
||||
VyohW1jg+lcZjVwlCzod1p1OXEhMvM8LOtNJvWOpEjZVKQfL/ZVX0NrXh165HP2Tk5hQqzGuUmFQocCm
|
||||
y4XzCQlpvKA9jTTa1WWwzBdzsNxdfhmfFxcxQRct0Q3UmEzY2t2FdWcHdrcb5+LiHvCC1hTSbFOWwDyT
|
||||
x8GyuDQCbRIJ3tBPp6CfU0pbcdA3M4mDCs7ExqYzwWHKibo7pNs6T4+yIofDSqtof3IJBtqzTq+Hx+uF
|
||||
y+OBky5kkh2aT0VFZTNBAEWQFEFqhyvO2pclSe6f03nYnC1EW9FFGOnGGSi+/X14KW6fD3tUtkdzYFiY
|
||||
0O801iWSaNFtUteWGST92nL1R/q1Q7ojAkHV0ZCQkuOhocV/c0wguHvgn2APyuPJ6dI4kpV/gzyjtycp
|
||||
gf8g4Begs1B6Kbj3cQAAAABJRU5ErkJggg==
|
||||
</value>
|
||||
</data>
|
||||
<metadata name="dialogOpenMib.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>337, 17</value>
|
||||
</metadata>
|
||||
</root>
|
||||
94
contrib/apps/LwipMibCompiler/MibViewer/MibViewer.csproj
Normal file
94
contrib/apps/LwipMibCompiler/MibViewer/MibViewer.csproj
Normal file
@@ -0,0 +1,94 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>8.0.30703</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{86CC0B65-7985-4017-A252-0A7A18DCAEF3}</ProjectGuid>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>LwipMibViewer</RootNamespace>
|
||||
<AssemblyName>MibViewer</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
|
||||
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Optimize>false</Optimize>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
|
||||
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<UseVSHostingProcess>false</UseVSHostingProcess>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="FormMain.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="FormMain.Designer.cs">
|
||||
<DependentUpon>FormMain.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<EmbeddedResource Include="FormMain.resx">
|
||||
<DependentUpon>FormMain.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<Compile Include="Properties\Resources.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
<DesignTime>True</DesignTime>
|
||||
</Compile>
|
||||
<None Include="app.config" />
|
||||
<None Include="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||
</None>
|
||||
<Compile Include="Properties\Settings.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Settings.settings</DependentUpon>
|
||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\SharpSnmpLib\SharpSnmpLib.Mib.csproj">
|
||||
<Project>{CBE20411-5DB7-487D-825D-7694267BB6F5}</Project>
|
||||
<Name>SharpSnmpLib.Mib</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<PropertyGroup />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
||||
51
contrib/apps/LwipMibCompiler/MibViewer/Program.cs
Normal file
51
contrib/apps/LwipMibCompiler/MibViewer/Program.cs
Normal file
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Copyright (c) 2001-2004 Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
* SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
* OF SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of the lwIP TCP/IP stack.
|
||||
*
|
||||
* Author: Martin Hentschel <info@cl-soft.de>
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace LwipMibViewer
|
||||
{
|
||||
static class Program
|
||||
{
|
||||
/// <summary>
|
||||
/// Der Haupteinstiegspunkt für die Anwendung.
|
||||
/// </summary>
|
||||
[STAThread]
|
||||
static void Main()
|
||||
{
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
Application.Run(new FormMain());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// Allgemeine Informationen über eine Assembly werden über die folgenden
|
||||
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
|
||||
// die mit einer Assembly verknüpft sind.
|
||||
[assembly: AssemblyTitle("LwipMibViewer")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("LwipMibViewer")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2015")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar
|
||||
// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von
|
||||
// COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
|
||||
[assembly: Guid("7ffbd1c1-1c64-45bb-b243-2400446c649d")]
|
||||
|
||||
// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
|
||||
//
|
||||
// Hauptversion
|
||||
// Nebenversion
|
||||
// Buildnummer
|
||||
// Revision
|
||||
//
|
||||
// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
|
||||
// übernehmen, indem Sie "*" eingeben:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
63
contrib/apps/LwipMibCompiler/MibViewer/Properties/Resources.Designer.cs
generated
Normal file
63
contrib/apps/LwipMibCompiler/MibViewer/Properties/Resources.Designer.cs
generated
Normal file
@@ -0,0 +1,63 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// Dieser Code wurde von einem Tool generiert.
|
||||
// Laufzeitversion:4.0.30319.225
|
||||
//
|
||||
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
|
||||
// der Code erneut generiert wird.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace LwipMibViewer.Properties {
|
||||
using System;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
|
||||
/// </summary>
|
||||
// Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
|
||||
// -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
|
||||
// Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
|
||||
// mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Resources {
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
internal Resources() {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("LwipMibViewer.Properties.Resources", typeof(Resources).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
|
||||
/// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture {
|
||||
get {
|
||||
return resourceCulture;
|
||||
}
|
||||
set {
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
117
contrib/apps/LwipMibCompiler/MibViewer/Properties/Resources.resx
Normal file
117
contrib/apps/LwipMibCompiler/MibViewer/Properties/Resources.resx
Normal file
@@ -0,0 +1,117 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
||||
26
contrib/apps/LwipMibCompiler/MibViewer/Properties/Settings.Designer.cs
generated
Normal file
26
contrib/apps/LwipMibCompiler/MibViewer/Properties/Settings.Designer.cs
generated
Normal file
@@ -0,0 +1,26 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// Dieser Code wurde von einem Tool generiert.
|
||||
// Laufzeitversion:4.0.30319.225
|
||||
//
|
||||
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
|
||||
// der Code erneut generiert wird.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace LwipMibViewer.Properties {
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
|
||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||
|
||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||
|
||||
public static Settings Default {
|
||||
get {
|
||||
return defaultInstance;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
|
||||
<Profiles>
|
||||
<Profile Name="(Default)" />
|
||||
</Profiles>
|
||||
<Settings />
|
||||
</SettingsFile>
|
||||
3
contrib/apps/LwipMibCompiler/MibViewer/app.config
Normal file
3
contrib/apps/LwipMibCompiler/MibViewer/app.config
Normal file
@@ -0,0 +1,3 @@
|
||||
<?xml version="1.0"?>
|
||||
<configuration>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
|
||||
@@ -0,0 +1,131 @@
|
||||
|
||||
|
||||
IANA-ADDRESS-FAMILY-NUMBERS-MIB DEFINITIONS ::= BEGIN
|
||||
|
||||
IMPORTS
|
||||
MODULE-IDENTITY,
|
||||
mib-2 FROM SNMPv2-SMI
|
||||
TEXTUAL-CONVENTION FROM SNMPv2-TC;
|
||||
|
||||
ianaAddressFamilyNumbers MODULE-IDENTITY
|
||||
LAST-UPDATED "200203140000Z" -- March 14, 2002
|
||||
ORGANIZATION "IANA"
|
||||
CONTACT-INFO
|
||||
"Postal: Internet Assigned Numbers Authority
|
||||
Internet Corporation for Assigned Names
|
||||
and Numbers
|
||||
4676 Admiralty Way, Suite 330
|
||||
Marina del Rey, CA 90292-6601
|
||||
USA
|
||||
|
||||
Tel: +1 310-823-9358
|
||||
E-Mail: iana&iana.org"
|
||||
DESCRIPTION
|
||||
"The MIB module defines the AddressFamilyNumbers
|
||||
textual convention."
|
||||
|
||||
-- revision history
|
||||
|
||||
REVISION "200203140000Z" -- March 14, 2002
|
||||
DESCRIPTION "AddressFamilyNumbers assignment 22 to
|
||||
fibreChannelWWPN. AddressFamilyNumbers
|
||||
assignment 23 to fibreChannelWWNN.
|
||||
AddressFamilyNumers assignment 24 to gwid."
|
||||
|
||||
REVISION "200009080000Z" -- September 8, 2000
|
||||
DESCRIPTION "AddressFamilyNumbers assignment 19 to xtpOverIpv4.
|
||||
AddressFamilyNumbers assignment 20 to xtpOverIpv6.
|
||||
AddressFamilyNumbers assignment 21 to xtpNativeModeXTP."
|
||||
|
||||
REVISION "200003010000Z" -- March 1, 2000
|
||||
DESCRIPTION "AddressFamilyNumbers assignment 17 to distinguishedName.
|
||||
AddressFamilyNumbers assignment 18 to asNumber."
|
||||
|
||||
REVISION "200002040000Z" -- February 4, 2000
|
||||
DESCRIPTION "AddressFamilyNumbers assignment 16 to dns."
|
||||
|
||||
REVISION "9908260000Z" -- August 26, 1999
|
||||
DESCRIPTION "Initial version, published as RFC 2677."
|
||||
|
||||
::= { mib-2 72 }
|
||||
|
||||
|
||||
AddressFamilyNumbers ::= TEXTUAL-CONVENTION
|
||||
|
||||
STATUS current
|
||||
DESCRIPTION
|
||||
"The definition of this textual convention with the
|
||||
addition of newly assigned values is published
|
||||
periodically by the IANA, in either the Assigned
|
||||
Numbers RFC, or some derivative of it specific to
|
||||
Internet Network Management number assignments.
|
||||
(The latest arrangements can be obtained by
|
||||
contacting the IANA.)
|
||||
|
||||
The enumerations are described as:
|
||||
|
||||
other(0), -- none of the following
|
||||
ipV4(1), -- IP Version 4
|
||||
ipV6(2), -- IP Version 6
|
||||
nsap(3), -- NSAP
|
||||
hdlc(4), -- (8-bit multidrop)
|
||||
bbn1822(5),
|
||||
all802(6), -- (includes all 802 media
|
||||
-- plus Ethernet 'canonical format')
|
||||
e163(7),
|
||||
e164(8), -- (SMDS, Frame Relay, ATM)
|
||||
f69(9), -- (Telex)
|
||||
x121(10), -- (X.25, Frame Relay)
|
||||
ipx(11), -- IPX (Internet Protocol Exchange)
|
||||
appleTalk(12), -- Apple Talk
|
||||
decnetIV(13), -- DEC Net Phase IV
|
||||
banyanVines(14), -- Banyan Vines
|
||||
e164withNsap(15),
|
||||
-- (E.164 with NSAP format subaddress)
|
||||
dns(16), -- (Domain Name System)
|
||||
distinguishedName(17), -- (Distinguished Name, per X.500)
|
||||
asNumber(18), -- (16-bit quantity, per the AS number space)
|
||||
xtpOverIpv4(19), -- XTP over IP version 4
|
||||
xtpOverIpv6(20), -- XTP over IP version 6
|
||||
xtpNativeModeXTP(21), -- XTP native mode XTP
|
||||
fibreChannelWWPN(22), -- Fibre Channel World-Wide Port Name
|
||||
fibreChannelWWNN(23), -- Fibre Channel World-Wide Node Name
|
||||
gwid(24), -- Gateway Identifier
|
||||
afi(25), -- AFI for L2VPN information
|
||||
reserved(65535)
|
||||
|
||||
|
||||
|
||||
Requests for new values should be made to IANA via
|
||||
email (iana&iana.org)."
|
||||
|
||||
SYNTAX INTEGER {
|
||||
other(0),
|
||||
ipV4(1),
|
||||
ipV6(2),
|
||||
nsap(3),
|
||||
hdlc(4),
|
||||
bbn1822(5),
|
||||
all802(6),
|
||||
e163(7),
|
||||
e164(8),
|
||||
f69(9),
|
||||
x121(10),
|
||||
ipx(11),
|
||||
appleTalk(12),
|
||||
decnetIV(13),
|
||||
banyanVines(14),
|
||||
e164withNsap(15),
|
||||
dns(16),
|
||||
distinguishedName(17), -- (Distinguished Name, per X.500)
|
||||
asNumber(18), -- (16-bit quantity, per the AS number space)
|
||||
xtpOverIpv4(19),
|
||||
xtpOverIpv6(20),
|
||||
xtpNativeModeXTP(21),
|
||||
fibreChannelWWPN(22),
|
||||
fibreChannelWWNN(23),
|
||||
gwid(24),
|
||||
afi(25),
|
||||
reserved(65535)
|
||||
}
|
||||
END
|
||||
345
contrib/apps/LwipMibCompiler/Mibs/IANA-CHARSET-MIB
Normal file
345
contrib/apps/LwipMibCompiler/Mibs/IANA-CHARSET-MIB
Normal file
@@ -0,0 +1,345 @@
|
||||
IANA-CHARSET-MIB DEFINITIONS ::= BEGIN
|
||||
-- http://www.iana.org/assignments/ianacharset-mib
|
||||
|
||||
IMPORTS
|
||||
MODULE-IDENTITY,
|
||||
mib-2
|
||||
FROM SNMPv2-SMI -- [RFC2578]
|
||||
TEXTUAL-CONVENTION
|
||||
FROM SNMPv2-TC; -- [RFC2579]
|
||||
|
||||
ianaCharsetMIB MODULE-IDENTITY
|
||||
LAST-UPDATED "200705140000Z"
|
||||
ORGANIZATION "IANA"
|
||||
CONTACT-INFO " Internet Assigned Numbers Authority
|
||||
|
||||
Postal: ICANN
|
||||
4676 Admiralty Way, Suite 330
|
||||
Marina del Rey, CA 90292
|
||||
|
||||
Tel: +1 310 823 9358
|
||||
E-Mail: iana&iana.org"
|
||||
|
||||
DESCRIPTION "This MIB module defines the IANACharset
|
||||
TEXTUAL-CONVENTION. The IANACharset TC is used to
|
||||
specify the encoding of string objects defined in
|
||||
a MIB.
|
||||
|
||||
Each version of this MIB will be released based on
|
||||
the IANA Charset Registry file (see RFC 2978) at
|
||||
http://www.iana.org/assignments/character-sets.
|
||||
|
||||
Note: The IANACharset TC, originally defined in
|
||||
RFC 1759, was inaccurately named CodedCharSet.
|
||||
|
||||
Note: Best practice is to define new MIB string
|
||||
objects with invariant UTF-8 (RFC 3629) syntax
|
||||
using the SnmpAdminString TC (defined in RFC 3411)
|
||||
in accordance with IETF Policy on Character Sets and
|
||||
Languages (RFC 2277).
|
||||
|
||||
Copyright (C) The Internet Society (2004). The
|
||||
initial version of this MIB module was published
|
||||
in RFC 3808; for full legal notices see the RFC
|
||||
itself. Supplementary information may be
|
||||
available on
|
||||
http://www.ietf.org/copyrights/ianamib.html."
|
||||
|
||||
-- revision history
|
||||
|
||||
REVISION "200705140000Z"
|
||||
DESCRIPTION "Registration of new charset 2107."
|
||||
|
||||
REVISION "200612070000Z"
|
||||
DESCRIPTION "Registration of new charsets numbered 118, 119,
|
||||
and 2106."
|
||||
|
||||
REVISION "200406080000Z"
|
||||
DESCRIPTION "Original version transferred from Printer MIB,
|
||||
generated from the IANA maintained assignments
|
||||
http://www.iana.org/assignments/character-sets."
|
||||
|
||||
::= { mib-2 106 }
|
||||
|
||||
IANACharset ::= TEXTUAL-CONVENTION
|
||||
STATUS current
|
||||
DESCRIPTION
|
||||
"Specifies an IANA registered 'charset' - coded character set
|
||||
(CCS) plus optional character encoding scheme (CES) - terms
|
||||
defined in 'IANA Charset Registration Procedures' (RFC 2978).
|
||||
|
||||
Objects of this syntax are used to specify the encoding for
|
||||
string objects defined in one or more MIBs. For example, the
|
||||
prtLocalizationCharacterSet, prtInterpreterDefaultCharSetIn, and
|
||||
prtInterpreterDefaultCharSetOut objects defined in Printer MIB.
|
||||
|
||||
The current list of 'charset' names and enumerated values
|
||||
is contained in the IANA Character Set Registry at:
|
||||
|
||||
http://www.iana.org/assignments/character-sets
|
||||
|
||||
Enum names are derived from the IANA Charset Registry 'Alias'
|
||||
fields that begin with 'cs' (for character set).
|
||||
Enum values are derived from the parallel 'MIBenum' fields."
|
||||
SYNTAX INTEGER {
|
||||
other(1), -- used if the designated
|
||||
-- character set is not currently
|
||||
-- registered by IANA
|
||||
unknown(2), -- used as a default value
|
||||
csASCII(3),
|
||||
csISOLatin1(4),
|
||||
csISOLatin2(5),
|
||||
csISOLatin3(6),
|
||||
csISOLatin4(7),
|
||||
csISOLatinCyrillic(8),
|
||||
csISOLatinArabic(9),
|
||||
csISOLatinGreek(10),
|
||||
csISOLatinHebrew(11),
|
||||
csISOLatin5(12),
|
||||
csISOLatin6(13),
|
||||
csISOTextComm(14),
|
||||
csHalfWidthKatakana(15),
|
||||
csJISEncoding(16),
|
||||
csShiftJIS(17),
|
||||
csEUCPkdFmtJapanese(18),
|
||||
csEUCFixWidJapanese(19),
|
||||
csISO4UnitedKingdom(20),
|
||||
csISO11SwedishForNames(21),
|
||||
csISO15Italian(22),
|
||||
csISO17Spanish(23),
|
||||
csISO21German(24),
|
||||
csISO60DanishNorwegian(25),
|
||||
csISO69French(26),
|
||||
csISO10646UTF1(27),
|
||||
csISO646basic1983(28),
|
||||
csINVARIANT(29),
|
||||
csISO2IntlRefVersion(30),
|
||||
csNATSSEFI(31),
|
||||
csNATSSEFIADD(32),
|
||||
csNATSDANO(33),
|
||||
csNATSDANOADD(34),
|
||||
csISO10Swedish(35),
|
||||
csKSC56011987(36),
|
||||
csISO2022KR(37),
|
||||
csEUCKR(38),
|
||||
csISO2022JP(39),
|
||||
csISO2022JP2(40),
|
||||
csISO13JISC6220jp(41),
|
||||
csISO14JISC6220ro(42),
|
||||
csISO16Portuguese(43),
|
||||
csISO18Greek7Old(44),
|
||||
csISO19LatinGreek(45),
|
||||
csISO25French(46),
|
||||
csISO27LatinGreek1(47),
|
||||
csISO5427Cyrillic(48),
|
||||
csISO42JISC62261978(49),
|
||||
csISO47BSViewdata(50),
|
||||
csISO49INIS(51),
|
||||
csISO50INIS8(52),
|
||||
csISO51INISCyrillic(53),
|
||||
csISO54271981(54),
|
||||
csISO5428Greek(55),
|
||||
csISO57GB1988(56),
|
||||
csISO58GB231280(57),
|
||||
csISO61Norwegian2(58),
|
||||
csISO70VideotexSupp1(59),
|
||||
csISO84Portuguese2(60),
|
||||
csISO85Spanish2(61),
|
||||
csISO86Hungarian(62),
|
||||
csISO87JISX0208(63),
|
||||
csISO88Greek7(64),
|
||||
csISO89ASMO449(65),
|
||||
csISO90(66),
|
||||
csISO91JISC62291984a(67),
|
||||
csISO92JISC62991984b(68),
|
||||
csISO93JIS62291984badd(69),
|
||||
csISO94JIS62291984hand(70),
|
||||
csISO95JIS62291984handadd(71),
|
||||
csISO96JISC62291984kana(72),
|
||||
csISO2033(73),
|
||||
csISO99NAPLPS(74),
|
||||
csISO102T617bit(75),
|
||||
csISO103T618bit(76),
|
||||
csISO111ECMACyrillic(77),
|
||||
csa71(78),
|
||||
csa72(79),
|
||||
csISO123CSAZ24341985gr(80),
|
||||
csISO88596E(81),
|
||||
csISO88596I(82),
|
||||
csISO128T101G2(83),
|
||||
csISO88598E(84),
|
||||
csISO88598I(85),
|
||||
csISO139CSN369103(86),
|
||||
csISO141JUSIB1002(87),
|
||||
csISO143IECP271(88),
|
||||
csISO146Serbian(89),
|
||||
csISO147Macedonian(90),
|
||||
csISO150(91),
|
||||
csISO151Cuba(92),
|
||||
csISO6937Add(93),
|
||||
csISO153GOST1976874(94),
|
||||
csISO8859Supp(95),
|
||||
csISO10367Box(96),
|
||||
csISO158Lap(97),
|
||||
csISO159JISX02121990(98),
|
||||
csISO646Danish(99),
|
||||
csUSDK(100),
|
||||
csDKUS(101),
|
||||
csKSC5636(102),
|
||||
csUnicode11UTF7(103),
|
||||
csISO2022CN(104),
|
||||
csISO2022CNEXT(105),
|
||||
csUTF8(106),
|
||||
csISO885913(109),
|
||||
csISO885914(110),
|
||||
csISO885915(111),
|
||||
csISO885916(112),
|
||||
csGBK(113),
|
||||
csGB18030(114),
|
||||
csOSDEBCDICDF0415(115),
|
||||
csOSDEBCDICDF03IRV(116),
|
||||
csOSDEBCDICDF041(117),
|
||||
csISO115481(118),
|
||||
csKZ1048(119),
|
||||
csUnicode(1000),
|
||||
csUCS4(1001),
|
||||
csUnicodeASCII(1002),
|
||||
csUnicodeLatin1(1003),
|
||||
csUnicodeIBM1261(1005),
|
||||
csUnicodeIBM1268(1006),
|
||||
csUnicodeIBM1276(1007),
|
||||
csUnicodeIBM1264(1008),
|
||||
csUnicodeIBM1265(1009),
|
||||
csUnicode11(1010),
|
||||
csSCSU(1011),
|
||||
csUTF7(1012),
|
||||
csUTF16BE(1013),
|
||||
csUTF16LE(1014),
|
||||
csUTF16(1015),
|
||||
csCESU8(1016),
|
||||
csUTF32(1017),
|
||||
csUTF32BE(1018),
|
||||
csUTF32LE(1019),
|
||||
csBOCU1(1020),
|
||||
csWindows30Latin1(2000),
|
||||
csWindows31Latin1(2001),
|
||||
csWindows31Latin2(2002),
|
||||
csWindows31Latin5(2003),
|
||||
csHPRoman8(2004),
|
||||
csAdobeStandardEncoding(2005),
|
||||
csVenturaUS(2006),
|
||||
csVenturaInternational(2007),
|
||||
csDECMCS(2008),
|
||||
csPC850Multilingual(2009),
|
||||
csPCp852(2010),
|
||||
csPC8CodePage437(2011),
|
||||
csPC8DanishNorwegian(2012),
|
||||
csPC862LatinHebrew(2013),
|
||||
csPC8Turkish(2014),
|
||||
csIBMSymbols(2015),
|
||||
csIBMThai(2016),
|
||||
csHPLegal(2017),
|
||||
csHPPiFont(2018),
|
||||
csHPMath8(2019),
|
||||
csHPPSMath(2020),
|
||||
csHPDesktop(2021),
|
||||
csVenturaMath(2022),
|
||||
csMicrosoftPublishing(2023),
|
||||
csWindows31J(2024),
|
||||
csGB2312(2025),
|
||||
csBig5(2026),
|
||||
csMacintosh(2027),
|
||||
csIBM037(2028),
|
||||
csIBM038(2029),
|
||||
csIBM273(2030),
|
||||
csIBM274(2031),
|
||||
csIBM275(2032),
|
||||
csIBM277(2033),
|
||||
csIBM278(2034),
|
||||
csIBM280(2035),
|
||||
csIBM281(2036),
|
||||
csIBM284(2037),
|
||||
csIBM285(2038),
|
||||
csIBM290(2039),
|
||||
csIBM297(2040),
|
||||
csIBM420(2041),
|
||||
csIBM423(2042),
|
||||
csIBM424(2043),
|
||||
csIBM500(2044),
|
||||
csIBM851(2045),
|
||||
csIBM855(2046),
|
||||
csIBM857(2047),
|
||||
csIBM860(2048),
|
||||
csIBM861(2049),
|
||||
csIBM863(2050),
|
||||
csIBM864(2051),
|
||||
csIBM865(2052),
|
||||
csIBM868(2053),
|
||||
csIBM869(2054),
|
||||
csIBM870(2055),
|
||||
csIBM871(2056),
|
||||
csIBM880(2057),
|
||||
csIBM891(2058),
|
||||
csIBM903(2059),
|
||||
csIBBM904(2060),
|
||||
csIBM905(2061),
|
||||
csIBM918(2062),
|
||||
csIBM1026(2063),
|
||||
csIBMEBCDICATDE(2064),
|
||||
csEBCDICATDEA(2065),
|
||||
csEBCDICCAFR(2066),
|
||||
csEBCDICDKNO(2067),
|
||||
csEBCDICDKNOA(2068),
|
||||
csEBCDICFISE(2069),
|
||||
csEBCDICFISEA(2070),
|
||||
csEBCDICFR(2071),
|
||||
csEBCDICIT(2072),
|
||||
csEBCDICPT(2073),
|
||||
csEBCDICES(2074),
|
||||
csEBCDICESA(2075),
|
||||
csEBCDICESS(2076),
|
||||
csEBCDICUK(2077),
|
||||
csEBCDICUS(2078),
|
||||
csUnknown8BiT(2079),
|
||||
csMnemonic(2080),
|
||||
csMnem(2081),
|
||||
csVISCII(2082),
|
||||
csVIQR(2083),
|
||||
csKOI8R(2084),
|
||||
csHZGB2312(2085),
|
||||
csIBM866(2086),
|
||||
csPC775Baltic(2087),
|
||||
csKOI8U(2088),
|
||||
csIBM00858(2089),
|
||||
csIBM00924(2090),
|
||||
csIBM01140(2091),
|
||||
csIBM01141(2092),
|
||||
csIBM01142(2093),
|
||||
csIBM01143(2094),
|
||||
csIBM01144(2095),
|
||||
csIBM01145(2096),
|
||||
csIBM01146(2097),
|
||||
csIBM01147(2098),
|
||||
csIBM01148(2099),
|
||||
csIBM01149(2100),
|
||||
csBig5HKSCS(2101),
|
||||
csIBM1047(2102),
|
||||
csPTCP154(2103),
|
||||
csAmiga1251(2104),
|
||||
csKOI7switched(2105),
|
||||
csBRF(2106),
|
||||
csTSCII(2107),
|
||||
cswindows1250(2250),
|
||||
cswindows1251(2251),
|
||||
cswindows1252(2252),
|
||||
cswindows1253(2253),
|
||||
cswindows1254(2254),
|
||||
cswindows1255(2255),
|
||||
cswindows1256(2256),
|
||||
cswindows1257(2257),
|
||||
cswindows1258(2258),
|
||||
csTIS620(2259),
|
||||
reserved(3000)
|
||||
}
|
||||
END
|
||||
|
||||
333
contrib/apps/LwipMibCompiler/Mibs/IANA/IANA-ITU-ALARM-TC-MIB
Normal file
333
contrib/apps/LwipMibCompiler/Mibs/IANA/IANA-ITU-ALARM-TC-MIB
Normal file
@@ -0,0 +1,333 @@
|
||||
IANA-ITU-ALARM-TC-MIB DEFINITIONS ::= BEGIN
|
||||
|
||||
IMPORTS
|
||||
MODULE-IDENTITY, mib-2 FROM SNMPv2-SMI
|
||||
TEXTUAL-CONVENTION FROM SNMPv2-TC;
|
||||
|
||||
ianaItuAlarmNumbers MODULE-IDENTITY
|
||||
LAST-UPDATED "200409090000Z" -- September 09, 2004
|
||||
ORGANIZATION "IANA"
|
||||
CONTACT-INFO
|
||||
"Postal: Internet Assigned Numbers Authority
|
||||
Internet Corporation for Assigned Names
|
||||
and Numbers
|
||||
4676 Admiralty Way, Suite 330
|
||||
Marina del Rey, CA 90292-6601
|
||||
USA
|
||||
|
||||
Tel: +1 310-823-9358
|
||||
E-Mail: iana&iana.org"
|
||||
DESCRIPTION
|
||||
"The MIB module defines the ITU Alarm
|
||||
textual convention for objects expected to require
|
||||
regular extension.
|
||||
|
||||
Copyright (C) The Internet Society (2004). The
|
||||
initial version of this MIB module was published
|
||||
in RFC 3877. For full legal notices see the RFC
|
||||
itself. Supplementary information may be available on:
|
||||
http://www.ietf.org/copyrights/ianamib.html"
|
||||
REVISION "200409090000Z"
|
||||
DESCRIPTION
|
||||
"Initial version, published as RFC 3877."
|
||||
::= { mib-2 119 }
|
||||
|
||||
|
||||
IANAItuProbableCause ::= TEXTUAL-CONVENTION
|
||||
STATUS current
|
||||
DESCRIPTION
|
||||
"ITU-T probable cause values. Duplicate values defined in
|
||||
X.733 are appended with X733 to ensure syntactic uniqueness.
|
||||
Probable cause value 0 is reserved for special purposes.
|
||||
|
||||
The Internet Assigned Number Authority (IANA) is responsible
|
||||
for the assignment of the enumerations in this TC.
|
||||
IANAItuProbableCause value of 0 is reserved for special
|
||||
purposes and MUST NOT be assigned.
|
||||
|
||||
Values of IANAItuProbableCause in the range 1 to 1023 are
|
||||
reserved for causes that correspond to ITU-T probable cause.
|
||||
|
||||
All other requests for new causes will be handled on a
|
||||
first-come, first served basis and will be assigned
|
||||
enumeration values starting with 1025.
|
||||
|
||||
Request should come in the form of well-formed
|
||||
SMI [RFC2578] for enumeration names that are unique and
|
||||
sufficiently descriptive.
|
||||
|
||||
While some effort will be taken to ensure that new probable
|
||||
causes do not conceptually duplicate existing probable
|
||||
causes it is acknowledged that the existence of conceptual
|
||||
duplicates in the starting probable cause list is an known
|
||||
industry reality.
|
||||
|
||||
To aid IANA in the administration of probable cause names
|
||||
and values, the OPS Area Director will appoint one or more
|
||||
experts to help review requests.
|
||||
|
||||
See http://www.iana.org"
|
||||
REFERENCE
|
||||
"ITU Recommendation M.3100, 'Generic Network Information
|
||||
Model', 1995
|
||||
ITU Recommendation X.733, 'Information Technology - Open
|
||||
Systems Interconnection - System Management: Alarm
|
||||
Reporting Function', 1992
|
||||
ITU Recommendation X.736, 'Information Technology - Open
|
||||
Systems Interconnection - System Management: Security
|
||||
Alarm Reporting Function', 1992"
|
||||
|
||||
SYNTAX INTEGER
|
||||
{
|
||||
-- The following probable causes were defined in M.3100
|
||||
aIS (1),
|
||||
callSetUpFailure (2),
|
||||
degradedSignal (3),
|
||||
farEndReceiverFailure (4),
|
||||
framingError (5),
|
||||
lossOfFrame (6),
|
||||
lossOfPointer (7),
|
||||
lossOfSignal (8),
|
||||
payloadTypeMismatch (9),
|
||||
transmissionError (10),
|
||||
remoteAlarmInterface (11),
|
||||
excessiveBER (12),
|
||||
pathTraceMismatch (13),
|
||||
unavailable (14),
|
||||
signalLabelMismatch (15),
|
||||
lossOfMultiFrame (16),
|
||||
receiveFailure (17),
|
||||
transmitFailure (18),
|
||||
modulationFailure (19),
|
||||
demodulationFailure (20),
|
||||
broadcastChannelFailure (21),
|
||||
connectionEstablishmentError (22),
|
||||
invalidMessageReceived (23),
|
||||
localNodeTransmissionError (24),
|
||||
remoteNodeTransmissionError (25),
|
||||
routingFailure (26),
|
||||
--Values 27-50 are reserved for communications alarm related
|
||||
--probable causes
|
||||
-- The following are used with equipment alarm.
|
||||
backplaneFailure (51),
|
||||
dataSetProblem (52),
|
||||
equipmentIdentifierDuplication (53),
|
||||
externalIFDeviceProblem (54),
|
||||
lineCardProblem (55),
|
||||
multiplexerProblem (56),
|
||||
nEIdentifierDuplication (57),
|
||||
powerProblem (58),
|
||||
processorProblem (59),
|
||||
protectionPathFailure (60),
|
||||
receiverFailure (61),
|
||||
replaceableUnitMissing (62),
|
||||
replaceableUnitTypeMismatch (63),
|
||||
synchronizationSourceMismatch (64),
|
||||
terminalProblem (65),
|
||||
timingProblem (66),
|
||||
transmitterFailure (67),
|
||||
trunkCardProblem (68),
|
||||
replaceableUnitProblem (69),
|
||||
realTimeClockFailure (70),
|
||||
--An equipment alarm to be issued if the system detects that the
|
||||
--real time clock has failed
|
||||
antennaFailure (71),
|
||||
batteryChargingFailure (72),
|
||||
diskFailure (73),
|
||||
frequencyHoppingFailure (74),
|
||||
iODeviceError (75),
|
||||
lossOfSynchronisation (76),
|
||||
lossOfRedundancy (77),
|
||||
powerSupplyFailure (78),
|
||||
signalQualityEvaluationFailure (79),
|
||||
tranceiverFailure (80),
|
||||
protectionMechanismFailure (81),
|
||||
protectingResourceFailure (82),
|
||||
-- Values 83-100 are reserved for equipment alarm related probable
|
||||
-- causes
|
||||
-- The following are used with environmental alarm.
|
||||
airCompressorFailure (101),
|
||||
airConditioningFailure (102),
|
||||
airDryerFailure (103),
|
||||
batteryDischarging (104),
|
||||
batteryFailure (105),
|
||||
commercialPowerFailure (106),
|
||||
coolingFanFailure (107),
|
||||
engineFailure (108),
|
||||
fireDetectorFailure (109),
|
||||
fuseFailure (110),
|
||||
generatorFailure (111),
|
||||
lowBatteryThreshold (112),
|
||||
pumpFailure (113),
|
||||
rectifierFailure (114),
|
||||
rectifierHighVoltage (115),
|
||||
rectifierLowFVoltage (116),
|
||||
ventilationsSystemFailure (117),
|
||||
enclosureDoorOpen (118),
|
||||
explosiveGas (119),
|
||||
fire (120),
|
||||
flood (121),
|
||||
highHumidity (122),
|
||||
highTemperature (123),
|
||||
highWind (124),
|
||||
iceBuildUp (125),
|
||||
intrusionDetection (126),
|
||||
lowFuel (127),
|
||||
lowHumidity (128),
|
||||
lowCablePressure (129),
|
||||
lowTemperatue (130),
|
||||
lowWater (131),
|
||||
smoke (132),
|
||||
toxicGas (133),
|
||||
coolingSystemFailure (134),
|
||||
externalEquipmentFailure (135),
|
||||
externalPointFailure (136),
|
||||
-- Values 137-150 are reserved for environmental alarm related
|
||||
-- probable causes
|
||||
-- The following are used with Processing error alarm.
|
||||
storageCapacityProblem (151),
|
||||
memoryMismatch (152),
|
||||
corruptData (153),
|
||||
outOfCPUCycles (154),
|
||||
sfwrEnvironmentProblem (155),
|
||||
sfwrDownloadFailure (156),
|
||||
lossOfRealTimel (157),
|
||||
--A processing error alarm to be issued after the system has
|
||||
--reinitialised. This will indicate
|
||||
--to the management systems that the view they have of the managed
|
||||
--system may no longer
|
||||
--be valid. Usage example: The managed
|
||||
--system issues this alarm after a reinitialization with severity
|
||||
--warning to inform the
|
||||
--management system about the event. No clearing notification will
|
||||
--be sent.
|
||||
applicationSubsystemFailure (158),
|
||||
configurationOrCustomisationError (159),
|
||||
databaseInconsistency (160),
|
||||
fileError (161),
|
||||
outOfMemory (162),
|
||||
softwareError (163),
|
||||
timeoutExpired (164),
|
||||
underlayingResourceUnavailable (165),
|
||||
versionMismatch (166),
|
||||
--Values 168-200 are reserved for processing error alarm related
|
||||
-- probable causes.
|
||||
bandwidthReduced (201),
|
||||
congestion (202),
|
||||
excessiveErrorRate (203),
|
||||
excessiveResponseTime (204),
|
||||
excessiveRetransmissionRate (205),
|
||||
reducedLoggingCapability (206),
|
||||
systemResourcesOverload (207 ),
|
||||
-- The following were defined X.733
|
||||
adapterError (500),
|
||||
applicationSubsystemFailture (501),
|
||||
bandwidthReducedX733 (502),
|
||||
callEstablishmentError (503),
|
||||
communicationsProtocolError (504),
|
||||
communicationsSubsystemFailure (505),
|
||||
configurationOrCustomizationError (506),
|
||||
congestionX733 (507),
|
||||
coruptData (508),
|
||||
cpuCyclesLimitExceeded (509),
|
||||
dataSetOrModemError (510),
|
||||
degradedSignalX733 (511),
|
||||
dteDceInterfaceError (512),
|
||||
enclosureDoorOpenX733 (513),
|
||||
equipmentMalfunction (514),
|
||||
excessiveVibration (515),
|
||||
fileErrorX733 (516),
|
||||
fireDetected (517),
|
||||
framingErrorX733 (518),
|
||||
heatingVentCoolingSystemProblem (519),
|
||||
humidityUnacceptable (520),
|
||||
inputOutputDeviceError (521),
|
||||
inputDeviceError (522),
|
||||
lanError (523),
|
||||
leakDetected (524),
|
||||
localNodeTransmissionErrorX733 (525),
|
||||
lossOfFrameX733 (526),
|
||||
lossOfSignalX733 (527),
|
||||
materialSupplyExhausted (528),
|
||||
multiplexerProblemX733 (529),
|
||||
outOfMemoryX733 (530),
|
||||
ouputDeviceError (531),
|
||||
performanceDegraded (532),
|
||||
powerProblems (533),
|
||||
pressureUnacceptable (534),
|
||||
processorProblems (535),
|
||||
pumpFailureX733 (536),
|
||||
queueSizeExceeded (537),
|
||||
receiveFailureX733 (538),
|
||||
receiverFailureX733 (539),
|
||||
remoteNodeTransmissionErrorX733 (540),
|
||||
resourceAtOrNearingCapacity (541),
|
||||
responseTimeExecessive (542),
|
||||
retransmissionRateExcessive (543),
|
||||
softwareErrorX733 (544),
|
||||
softwareProgramAbnormallyTerminated (545),
|
||||
softwareProgramError (546),
|
||||
storageCapacityProblemX733 (547),
|
||||
temperatureUnacceptable (548),
|
||||
thresholdCrossed (549),
|
||||
timingProblemX733 (550),
|
||||
toxicLeakDetected (551),
|
||||
transmitFailureX733 (552),
|
||||
transmiterFailure (553),
|
||||
underlyingResourceUnavailable (554),
|
||||
versionMismatchX733 (555),
|
||||
-- The following are defined in X.736
|
||||
authenticationFailure (600),
|
||||
breachOfConfidentiality (601),
|
||||
cableTamper (602),
|
||||
delayedInformation (603),
|
||||
denialOfService (604),
|
||||
duplicateInformation (605),
|
||||
informationMissing (606),
|
||||
informationModificationDetected (607),
|
||||
informationOutOfSequence (608),
|
||||
keyExpired (609),
|
||||
nonRepudiationFailure (610),
|
||||
outOfHoursActivity (611),
|
||||
outOfService (612),
|
||||
proceduralError (613),
|
||||
unauthorizedAccessAttempt (614),
|
||||
unexpectedInformation (615),
|
||||
|
||||
other (1024)
|
||||
}
|
||||
|
||||
IANAItuEventType ::= TEXTUAL-CONVENTION
|
||||
STATUS current
|
||||
DESCRIPTION
|
||||
"The ITU event Type values.
|
||||
|
||||
The Internet Assigned Number Authority (IANA) is
|
||||
responsible for the assignment of the enumerations
|
||||
in this TC.
|
||||
|
||||
Request should come in the form of well-formed
|
||||
SMI [RFC2578] for enumeration names that are unique
|
||||
and sufficiently descriptive.
|
||||
|
||||
See http://www.iana.org "
|
||||
REFERENCE
|
||||
"ITU Recommendation X.736, 'Information Technology - Open
|
||||
Systems Interconnection - System Management: Security
|
||||
Alarm Reporting Function', 1992"
|
||||
SYNTAX INTEGER
|
||||
{
|
||||
other (1),
|
||||
communicationsAlarm (2),
|
||||
qualityOfServiceAlarm (3),
|
||||
processingErrorAlarm (4),
|
||||
equipmentAlarm (5),
|
||||
environmentalAlarm (6),
|
||||
integrityViolation (7),
|
||||
operationalViolation (8),
|
||||
physicalViolation (9),
|
||||
securityServiceOrMechanismViolation (10),
|
||||
timeDomainViolation (11)
|
||||
}
|
||||
|
||||
END
|
||||
127
contrib/apps/LwipMibCompiler/Mibs/IANA/IANA-LANGUAGE-MIB
Normal file
127
contrib/apps/LwipMibCompiler/Mibs/IANA/IANA-LANGUAGE-MIB
Normal file
@@ -0,0 +1,127 @@
|
||||
|
||||
IANA-LANGUAGE-MIB DEFINITIONS ::= BEGIN
|
||||
|
||||
IMPORTS
|
||||
MODULE-IDENTITY, OBJECT-IDENTITY, mib-2
|
||||
FROM SNMPv2-SMI;
|
||||
|
||||
ianaLanguages MODULE-IDENTITY
|
||||
LAST-UPDATED "200005100000Z" -- May 10, 2000
|
||||
ORGANIZATION "IANA"
|
||||
CONTACT-INFO
|
||||
"Internet Assigned Numbers Authority (IANA)
|
||||
|
||||
Postal: ICANN
|
||||
4676 Admiralty Way, Suite 330
|
||||
Marina del Rey, CA 90292
|
||||
|
||||
Tel: +1 310 823 9358 x20
|
||||
E-Mail: iana&iana.org"
|
||||
DESCRIPTION
|
||||
"The MIB module registers object identifier values for
|
||||
well-known programming and scripting languages. Every
|
||||
language registration MUST describe the format used
|
||||
when transferring scripts written in this language.
|
||||
|
||||
Any additions or changes to the contents of this MIB
|
||||
module require Designated Expert Review as defined in
|
||||
the Guidelines for Writing IANA Considerations Section
|
||||
document. The Designated Expert will be selected by
|
||||
the IESG Area Director of the OPS Area.
|
||||
|
||||
Note, this module does not have to register all possible
|
||||
languages since languages are identified by object
|
||||
identifier values. It is therefore possible to registered
|
||||
languages in private OID trees. The references given below are not
|
||||
normative with regard to the language version. Other
|
||||
references might be better suited to describe some newer
|
||||
versions of this language. The references are only
|
||||
provided as `a pointer into the right direction'."
|
||||
|
||||
-- Revision log, in reverse chronological order
|
||||
|
||||
REVISION "200005100000Z" -- May 10, 2000
|
||||
DESCRIPTION "Import mib-2 instead of experimental, so that
|
||||
this module compiles"
|
||||
|
||||
REVISION "199909090900Z" -- September 9, 1999
|
||||
DESCRIPTION "Initial version as published at time of
|
||||
publication of RFC 2591."
|
||||
|
||||
::= { mib-2 73 }
|
||||
|
||||
|
||||
ianaLangJavaByteCode OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION
|
||||
"Java byte code to be processed by a Java virtual machine.
|
||||
A script written in Java byte code is transferred by using
|
||||
the Java archive file format (JAR)."
|
||||
REFERENCE
|
||||
"The Java Virtual Machine Specification.
|
||||
ISBN 0-201-63452-X"
|
||||
::= { ianaLanguages 1 }
|
||||
|
||||
ianaLangTcl OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION
|
||||
"The Tool Command Language (Tcl). A script written in the
|
||||
Tcl language is transferred in Tcl source code format."
|
||||
REFERENCE
|
||||
"Tcl and the Tk Toolkit.
|
||||
ISBN 0-201-63337-X"
|
||||
::= { ianaLanguages 2 }
|
||||
|
||||
ianaLangPerl OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION
|
||||
"The Perl language. A script written in the Perl language
|
||||
is transferred in Perl source code format."
|
||||
REFERENCE
|
||||
"Programming Perl.
|
||||
ISBN 1-56592-149-6"
|
||||
::= { ianaLanguages 3 }
|
||||
|
||||
ianaLangScheme OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION
|
||||
"The Scheme language. A script written in the Scheme
|
||||
language is transferred in Scheme source code format."
|
||||
REFERENCE
|
||||
"The Revised^4 Report on the Algorithmic Language Scheme.
|
||||
MIT Press"
|
||||
::= { ianaLanguages 4 }
|
||||
|
||||
ianaLangSRSL OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION
|
||||
"The SNMP Script Language defined by SNMP Research. A
|
||||
script written in the SNMP Script Language is transferred
|
||||
in the SNMP Script Language source code format."
|
||||
::= { ianaLanguages 5 }
|
||||
|
||||
ianaLangPSL OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION
|
||||
"The Patrol Script Language defined by BMC Software. A script
|
||||
written in the Patrol Script Language is transferred in the
|
||||
Patrol Script Language source code format."
|
||||
REFERENCE
|
||||
"PATROL Script Language Reference Manual, Version 3.0,
|
||||
November 30, 1995. BMC Software, Inc. 2101 City West Blvd.,
|
||||
Houston, Texas 77042."
|
||||
::= { ianaLanguages 6 }
|
||||
|
||||
ianaLangSMSL OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION
|
||||
"The Systems Management Scripting Language. A script written
|
||||
in the SMSL language is transferred in the SMSL source code
|
||||
format."
|
||||
REFERENCE
|
||||
"ISO/ITU Command Sequencer.
|
||||
ISO 10164-21 or ITU X.753"
|
||||
::= { ianaLanguages 7 }
|
||||
|
||||
END
|
||||
|
||||
67
contrib/apps/LwipMibCompiler/Mibs/IANA/IANA-MALLOC-MIB
Normal file
67
contrib/apps/LwipMibCompiler/Mibs/IANA/IANA-MALLOC-MIB
Normal file
@@ -0,0 +1,67 @@
|
||||
|
||||
IANA-MALLOC-MIB DEFINITIONS ::= BEGIN
|
||||
|
||||
IMPORTS
|
||||
MODULE-IDENTITY, mib-2 FROM SNMPv2-SMI
|
||||
TEXTUAL-CONVENTION FROM SNMPv2-TC;
|
||||
|
||||
ianaMallocMIB MODULE-IDENTITY
|
||||
LAST-UPDATED "200301271200Z" -- January 27, 2003
|
||||
ORGANIZATION "IANA"
|
||||
CONTACT-INFO
|
||||
" Internet Assigned Numbers Authority
|
||||
Internet Corporation for Assigned Names and Numbers
|
||||
4676 Admiralty Way, Suite 330
|
||||
Marina del Rey, CA 90292-6601
|
||||
|
||||
Phone: +1 310 823 9358
|
||||
EMail: iana&iana.org"
|
||||
DESCRIPTION
|
||||
"This MIB module defines the IANAscopeSource and
|
||||
IANAmallocRangeSource textual conventions for use in MIBs
|
||||
which need to identify ways of learning multicast scope and
|
||||
range information.
|
||||
|
||||
Any additions or changes to the contents of this MIB module
|
||||
require either publication of an RFC, or Designated Expert
|
||||
Review as defined in the Guidelines for Writing IANA
|
||||
Considerations Section document. The Designated Expert will
|
||||
be selected by the IESG Area Director(s) of the Transport
|
||||
Area."
|
||||
|
||||
-- revision log
|
||||
|
||||
REVISION "200301271200Z" -- January 27, 2003
|
||||
DESCRIPTION
|
||||
"Initial version."
|
||||
::= { mib-2 102 }
|
||||
|
||||
IANAscopeSource ::= TEXTUAL-CONVENTION
|
||||
STATUS current
|
||||
DESCRIPTION
|
||||
"The source of multicast scope information."
|
||||
SYNTAX INTEGER {
|
||||
other(1), -- none of the following
|
||||
manual(2), -- statically configured
|
||||
local(3), -- automatically added by the system,
|
||||
-- such as a Source-Specific Multicast
|
||||
-- scope
|
||||
mzap(4), -- MZAP
|
||||
madcap(5) -- MADCAP
|
||||
}
|
||||
|
||||
IANAmallocRangeSource ::= TEXTUAL-CONVENTION
|
||||
STATUS current
|
||||
DESCRIPTION
|
||||
"The source of multicast address allocation range
|
||||
information."
|
||||
SYNTAX INTEGER {
|
||||
other(1), -- none of the following
|
||||
manual(2), -- statically configured
|
||||
local(3) -- automatically added by the system,
|
||||
-- such as a Source-Specific Multicast
|
||||
-- range
|
||||
}
|
||||
|
||||
END
|
||||
|
||||
770
contrib/apps/LwipMibCompiler/Mibs/IANA/IANA-MAU-MIB
Normal file
770
contrib/apps/LwipMibCompiler/Mibs/IANA/IANA-MAU-MIB
Normal file
@@ -0,0 +1,770 @@
|
||||
IANA-MAU-MIB DEFINITIONS ::= BEGIN
|
||||
|
||||
IMPORTS
|
||||
MODULE-IDENTITY, OBJECT-IDENTITY, mib-2
|
||||
FROM SNMPv2-SMI
|
||||
TEXTUAL-CONVENTION
|
||||
FROM SNMPv2-TC
|
||||
;
|
||||
|
||||
ianaMauMIB MODULE-IDENTITY
|
||||
LAST-UPDATED "200704210000Z" -- April 21, 2007
|
||||
ORGANIZATION "IANA"
|
||||
CONTACT-INFO " Internet Assigned Numbers Authority
|
||||
|
||||
Postal: ICANN
|
||||
4676 Admiralty Way, Suite 330
|
||||
Marina del Rey, CA 90292
|
||||
|
||||
Tel: +1-310-823-9358
|
||||
EMail: iana&iana.org"
|
||||
|
||||
DESCRIPTION
|
||||
"This MIB module defines dot3MauType OBJECT-IDENTITIES and
|
||||
IANAifMauListBits, IANAifMauMediaAvailable,
|
||||
IANAifMauAutoNegCapBits, and IANAifJackType
|
||||
|
||||
TEXTUAL-CONVENTIONs, specifying enumerated values of the
|
||||
ifMauTypeListBits, ifMauMediaAvailable / rpMauMediaAvailable,
|
||||
ifMauAutoNegCapabilityBits / ifMauAutoNegCapAdvertisedBits /
|
||||
ifMauAutoNegCapReceivedBits and ifJackType / rpJackType objects
|
||||
respectively, defined in the MAU-MIB.
|
||||
|
||||
It is intended that each new MAU type, Media Availability
|
||||
state, Auto Negotiation capability and/or Jack type defined by
|
||||
the IEEE 802.3 working group and approved for publication in a
|
||||
revision of IEEE Std 802.3 will be added to this MIB module,
|
||||
provided that it is suitable for being managed by the base
|
||||
objects in the MAU-MIB. An Expert Review, as defined in
|
||||
RFC 2434 [RFC2434], is REQUIRED for such additions.
|
||||
|
||||
The following reference is used throughout this MIB module:
|
||||
|
||||
[IEEE802.3] refers to:
|
||||
IEEE Std 802.3, 2005 Edition: 'IEEE Standard for
|
||||
Information technology - Telecommunications and information
|
||||
exchange between systems - Local and metropolitan area
|
||||
networks - Specific requirements -
|
||||
Part 3: Carrier sense multiple access with collision
|
||||
detection (CSMA/CD) access method and physical layer
|
||||
specifications'.
|
||||
|
||||
This reference should be updated as appropriate when new
|
||||
MAU types, Media Availability states, Auto Negotiation
|
||||
capabilities, and/or Jack types are added to this MIB module.
|
||||
|
||||
Copyright (C) The IETF Trust (2007).
|
||||
The initial version of this MIB module was published in
|
||||
RFC 4836; for full legal notices see the RFC itself.
|
||||
Supplementary information may be available at:
|
||||
http://www.ietf.org/copyrights/ianamib.html"
|
||||
|
||||
REVISION "200704210000Z" -- April 21, 2007
|
||||
DESCRIPTION "Initial version of this MIB as published in
|
||||
RFC 4836."
|
||||
::= { mib-2 154 }
|
||||
|
||||
-- Textual Conventions
|
||||
|
||||
IANAifMauTypeListBits ::= TEXTUAL-CONVENTION
|
||||
STATUS current
|
||||
DESCRIPTION
|
||||
"This data type is used as the syntax of the ifMauTypeListBits
|
||||
object in the (updated) definition of MAU-MIB's ifMauTable.
|
||||
|
||||
The most recent version of this textual convention is available
|
||||
in the online version of this MIB module on the IANA web site.
|
||||
|
||||
Requests for new values should be made to IANA via email
|
||||
(iana&iana.org).
|
||||
|
||||
Note that changes in this textual convention SHALL be
|
||||
synchronized with relevant changes in the dot3MauType
|
||||
OBJECT-IDENTITIES."
|
||||
REFERENCE
|
||||
"[IEEE802.3], Section 30.5.1.1.2"
|
||||
SYNTAX BITS {
|
||||
bOther(0), -- other or unknown
|
||||
bAUI(1), -- AUI
|
||||
b10base5(2), -- 10BASE-5
|
||||
bFoirl(3), -- FOIRL
|
||||
|
||||
b10base2(4), -- 10BASE-2
|
||||
b10baseT(5), -- 10BASE-T duplex mode unknown
|
||||
b10baseFP(6), -- 10BASE-FP
|
||||
b10baseFB(7), -- 10BASE-FB
|
||||
b10baseFL(8), -- 10BASE-FL duplex mode unknown
|
||||
b10broad36(9), -- 10BROAD36
|
||||
b10baseTHD(10), -- 10BASE-T half duplex mode
|
||||
b10baseTFD(11), -- 10BASE-T full duplex mode
|
||||
b10baseFLHD(12), -- 10BASE-FL half duplex mode
|
||||
b10baseFLFD(13), -- 10BASE-FL full duplex mode
|
||||
b100baseT4(14), -- 100BASE-T4
|
||||
b100baseTXHD(15), -- 100BASE-TX half duplex mode
|
||||
b100baseTXFD(16), -- 100BASE-TX full duplex mode
|
||||
b100baseFXHD(17), -- 100BASE-FX half duplex mode
|
||||
b100baseFXFD(18), -- 100BASE-FX full duplex mode
|
||||
b100baseT2HD(19), -- 100BASE-T2 half duplex mode
|
||||
b100baseT2FD(20), -- 100BASE-T2 full duplex mode
|
||||
|
||||
b1000baseXHD(21), -- 1000BASE-X half duplex mode
|
||||
b1000baseXFD(22), -- 1000BASE-X full duplex mode
|
||||
b1000baseLXHD(23), -- 1000BASE-LX half duplex mode
|
||||
b1000baseLXFD(24), -- 1000BASE-LX full duplex mode
|
||||
b1000baseSXHD(25), -- 1000BASE-SX half duplex mode
|
||||
b1000baseSXFD(26), -- 1000BASE-SX full duplex mode
|
||||
b1000baseCXHD(27), -- 1000BASE-CX half duplex mode
|
||||
b1000baseCXFD(28), -- 1000BASE-CX full duplex mode
|
||||
b1000baseTHD(29), -- 1000BASE-T half duplex mode
|
||||
b1000baseTFD(30), -- 1000BASE-T full duplex mode
|
||||
|
||||
b10GbaseX(31), -- 10GBASE-X
|
||||
b10GbaseLX4(32), -- 10GBASE-LX4
|
||||
|
||||
b10GbaseR(33), -- 10GBASE-R
|
||||
b10GbaseER(34), -- 10GBASE-ER
|
||||
b10GbaseLR(35), -- 10GBASE-LR
|
||||
b10GbaseSR(36), -- 10GBASE-SR
|
||||
b10GbaseW(37), -- 10GBASE-W
|
||||
b10GbaseEW(38), -- 10GBASE-EW
|
||||
b10GbaseLW(39), -- 10GBASE-LW
|
||||
b10GbaseSW(40), -- 10GBASE-SW
|
||||
-- new since RFC 3636
|
||||
b10GbaseCX4(41), -- 10GBASE-CX4
|
||||
b2BaseTL(42), -- 2BASE-TL
|
||||
b10PassTS(43), -- 10PASS-TS
|
||||
b100BaseBX10D(44), -- 100BASE-BX10D
|
||||
b100BaseBX10U(45), -- 100BASE-BX10U
|
||||
b100BaseLX10(46), -- 100BASE-LX10
|
||||
b1000BaseBX10D(47), -- 1000BASE-BX10D
|
||||
b1000BaseBX10U(48), -- 1000BASE-BX10U
|
||||
b1000BaseLX10(49), -- 1000BASE-LX10
|
||||
b1000BasePX10D(50), -- 1000BASE-PX10D
|
||||
b1000BasePX10U(51), -- 1000BASE-PX10U
|
||||
b1000BasePX20D(52), -- 1000BASE-PX20D
|
||||
b1000BasePX20U(53) -- 1000BASE-PX20U
|
||||
}
|
||||
|
||||
IANAifMauMediaAvailable ::= TEXTUAL-CONVENTION
|
||||
STATUS current
|
||||
DESCRIPTION
|
||||
"This data type is used as the syntax of the
|
||||
ifMauMediaAvailable and rpMauMediaAvailable objects in the
|
||||
(updated) definition of MAU-MIB's ifMauTable and rpMauTable
|
||||
respectively.
|
||||
|
||||
Possible values are:
|
||||
other(1) - undefined (not listed below)
|
||||
unknown(2) - MAU's true state is unknown; e.g.,
|
||||
during initialization
|
||||
available(3) - link, light, or loopback is normal
|
||||
notAvailable(4) - link loss, low light, or no loopback
|
||||
remoteFault(5) - a fault has been detected at the
|
||||
remote end of the link. This value
|
||||
applies to 10BASE-FB, 100BASE-T4 Far
|
||||
End Fault Indication and non-specified
|
||||
remote faults from a system running
|
||||
auto-negotiation
|
||||
invalidSignal(6) - invalid signal has been received from
|
||||
the other end of the link, 10BASE-FB
|
||||
only
|
||||
remoteJabber(7) - remote fault, due to jabber
|
||||
|
||||
remoteLinkLoss(8) - remote fault, due to link loss
|
||||
remoteTest(9) - remote fault, due to test
|
||||
offline(10) - offline, Clause 37 Auto-Negotiation
|
||||
only
|
||||
autoNegError(11) - Auto-Negotiation Error, Clause 37
|
||||
Auto-Negotiation only
|
||||
pmdLinkFault(12) - PMA/PMD receive link fault. In case
|
||||
of PAF (2BASE-TL / 10PASS-TS PHYs),
|
||||
all PMEs in the aggregation group have
|
||||
detected a link fault
|
||||
wisFrameLoss(13) - WIS loss of frame, 10GBASE-W only
|
||||
wisSignalLoss(14) - WIS loss of signal, 10GBASE-W only
|
||||
pcsLinkFault(15) - PCS receive link fault
|
||||
excessiveBER(16) - PCS Bit Error Ratio monitor
|
||||
reporting excessive error ratio
|
||||
dxsLinkFault(17) - DTE XGXS receive link fault, XAUI only
|
||||
pxsLinkFault(18) - PHY XGXS receive link fault, XAUI only
|
||||
availableReduced(19) - link normal, reduced bandwidth,
|
||||
2BASE-TL / 10PASS-TS only
|
||||
ready(20) - at least one PME in the aggregation
|
||||
group is detecting handshake tones,
|
||||
2BASE-TL / 10PASS-TS only
|
||||
|
||||
If the MAU is a 10M b/s link or fiber type (FOIRL, 10BASE-T,
|
||||
10BASE-F), then this is equivalent to the link test fail
|
||||
state/low light function. For an AUI, 10BASE2, 10BASE5, or
|
||||
10BROAD36 MAU, this indicates whether loopback is detected on
|
||||
the DI circuit. The value of this attribute persists between
|
||||
packets for MAU types AUI, 10BASE5, 10BASE2, 10BROAD36, and
|
||||
10BASEFP.
|
||||
|
||||
At power-up or following a reset, the Media Available state
|
||||
will be unknown(2) for AUI, 10BASE5, 10BASE2, 10BROAD36, and
|
||||
10BASE-FP MAUs. For these MAUs loopback will be tested on each
|
||||
transmission during which no collision is detected.
|
||||
If DI is receiving input when DO returns to IDL after a
|
||||
transmission and there has been no collision during the
|
||||
transmission, then loopback will be detected. The Media
|
||||
Available state will only change during noncollided
|
||||
transmissions for AUI, 10BASE2, 10BASE5, 10BROAD36, and
|
||||
10BASE-FP MAUs.
|
||||
|
||||
For 100BASE-T2, 100BASE-T4, 100BASE-TX, 100BASE-FX,
|
||||
100BASE-LX10, and 100BASE-BX10 PHYs the enumerations match the
|
||||
states within the link integrity state diagram.
|
||||
Any MAU that implements management of [IEEE802.3] Clause
|
||||
28 Auto-Negotiation, will map remote fault indication to
|
||||
remoteFault(5).
|
||||
|
||||
Any MAU that implements management of Clause 37
|
||||
Auto-Negotiation, will map the received RF1 and RF2 bits as
|
||||
follows: Offline maps to offline(10), Link_Failure maps to
|
||||
remoteFault(5), and Auto-Negotiation Error maps to
|
||||
autoNegError(11).
|
||||
|
||||
The value remoteFault(5) applies to 10BASE-FB remote
|
||||
fault indication, the 100BASE-X far-end fault indication, and
|
||||
nonspecified remote faults from a system running Clause 28
|
||||
Auto-Negotiation.
|
||||
|
||||
The value remoteJabber(7), remoteLink loss(8), or remoteTest(9)
|
||||
SHOULD be used instead of remoteFault(5) where the reason for
|
||||
remote fault is identified in the remote signaling protocol.
|
||||
Where a Clause 22 MII or Clause 35 GMII is present, a logic
|
||||
one in the remote fault bit maps to the value remoteFault(5),
|
||||
a logic zero in the link status bit maps to the enumeration
|
||||
notAvailable(4). The value notAvailable(4) takes precedence
|
||||
over remoteFault(5).
|
||||
|
||||
For 2BASE-TL and 10PASS-TS PHYs, the value unknown(2) maps to
|
||||
the condition where the PHY (PCS with connected PMEs) is
|
||||
initializing, the value ready(20) maps to the condition where
|
||||
the interface is down and at least one PME in the aggregation
|
||||
group is ready for handshake, the value available(3) maps to
|
||||
the condition where all the PMEs in the aggregation group are
|
||||
up, the value notAvailable(4) maps to the condition where all
|
||||
the PMEs in the aggregation group are down and no handshake
|
||||
tones are detected, the value availableReduced(19) maps to the
|
||||
condition where the interface is up, a link fault is detected
|
||||
at the receive direction by one or more PMEs in the
|
||||
aggregation group, but at least one PME is up and the
|
||||
enumeration pmdLinkFault(12) maps to the condition where a link
|
||||
fault is detected at the receive direction by all of the PMEs
|
||||
in the aggregation group.
|
||||
|
||||
For 10 Gb/s the enumerations map to value of the link_fault
|
||||
variable within the Link Fault Signaling state diagram
|
||||
as follows: the value OK maps to the value available(3),
|
||||
the value Local Fault maps to the value notAvailable(4),
|
||||
and the value Remote Fault maps to the value remoteFault(5).
|
||||
The value pmdLinkFault(12), wisFrameLoss(13),
|
||||
wisSignalLoss(14), pcsLinkFault(15), excessiveBER(16), or
|
||||
dxsLinkFault(17) SHOULD be used instead of the value
|
||||
notAvailable(4), where the reason for the Local Fault state can
|
||||
be identified through the use of the Clause 45 MDIO Interface.
|
||||
Where multiple reasons for the Local Fault state can be
|
||||
identified, only the highest precedence error SHOULD be
|
||||
|
||||
reported. This precedence in descending order is as follows:
|
||||
|
||||
pxsLinkFault
|
||||
pmdLinkFault
|
||||
wisFrameLoss
|
||||
wisSignalLoss
|
||||
pcsLinkFault
|
||||
excessiveBER
|
||||
dxsLinkFault.
|
||||
|
||||
Where a Clause 45 MDIO interface is present a logic zero in
|
||||
the PMA/PMD Receive link status bit ([IEEE802.3]
|
||||
Section 45.2.1.2.2) maps to the value pmdLinkFault(12),
|
||||
logic one in the LOF status bit (Section 45.2.2.10.4) maps
|
||||
to the value wisFrameLoss(13), a logic one in the LOS
|
||||
status bit (Section 45.2.2.10.5) maps to the value
|
||||
wisSignalLoss, a logic zero in the PCS Receive
|
||||
link status bit (Section 45.2.3.2.2) maps to the value
|
||||
pcsLinkFault(15), a logic one in the 10GBASE-R PCS Latched
|
||||
high BER status bit (Section 45.2.3.12.2) maps to the value
|
||||
excessiveBER, a logic zero in the DTE XS receive link status
|
||||
bit (Section 45.2.5.2.2) maps to the value dxsLinkFault(17)
|
||||
and a logic zero in the PHY XS transmit link status bit
|
||||
(Section 45.2.4.2.2) maps to the value pxsLinkFault(18).
|
||||
|
||||
The most recent version of this textual convention is available
|
||||
in the online version of this MIB module on the IANA web site.
|
||||
|
||||
Requests for new values should be made to IANA via email
|
||||
(iana&iana.org)."
|
||||
REFERENCE
|
||||
"[IEEE802.3], Section 30.5.1.1.4"
|
||||
SYNTAX INTEGER {
|
||||
other(1),
|
||||
unknown(2),
|
||||
available(3),
|
||||
notAvailable(4),
|
||||
remoteFault(5),
|
||||
invalidSignal(6),
|
||||
remoteJabber(7),
|
||||
remoteLinkLoss(8),
|
||||
remoteTest(9),
|
||||
offline(10),
|
||||
autoNegError(11),
|
||||
pmdLinkFault(12),
|
||||
wisFrameLoss(13),
|
||||
wisSignalLoss(14),
|
||||
pcsLinkFault(15),
|
||||
|
||||
excessiveBER(16),
|
||||
dxsLinkFault(17),
|
||||
pxsLinkFault(18),
|
||||
availableReduced(19),
|
||||
ready(20)
|
||||
}
|
||||
|
||||
IANAifMauAutoNegCapBits ::= TEXTUAL-CONVENTION
|
||||
STATUS current
|
||||
DESCRIPTION
|
||||
"This data type is used as the syntax of the
|
||||
ifMauAutoNegCapabilityBits, ifMauAutoNegCapAdvertisedBits, and
|
||||
ifMauAutoNegCapReceivedBits objects in the (updated) definition
|
||||
of MAU-MIB's ifMauAutoNegTable.
|
||||
|
||||
The most recent version of this textual convention is available
|
||||
in the online version of this MIB module on the IANA web site.
|
||||
|
||||
Requests for new values should be made to IANA via email
|
||||
(iana&iana.org)."
|
||||
REFERENCE
|
||||
"[IEEE802.3], Section 30.6.1.1.5"
|
||||
SYNTAX BITS {
|
||||
bOther(0), -- other or unknown
|
||||
b10baseT(1), -- 10BASE-T half duplex mode
|
||||
b10baseTFD(2), -- 10BASE-T full duplex mode
|
||||
b100baseT4(3), -- 100BASE-T4
|
||||
b100baseTX(4), -- 100BASE-TX half duplex mode
|
||||
b100baseTXFD(5), -- 100BASE-TX full duplex mode
|
||||
b100baseT2(6), -- 100BASE-T2 half duplex mode
|
||||
b100baseT2FD(7), -- 100BASE-T2 full duplex mode
|
||||
bFdxPause(8), -- PAUSE for full-duplex links
|
||||
bFdxAPause(9), -- Asymmetric PAUSE for full-duplex
|
||||
-- links
|
||||
bFdxSPause(10), -- Symmetric PAUSE for full-duplex
|
||||
-- links
|
||||
bFdxBPause(11), -- Asymmetric and Symmetric PAUSE for
|
||||
-- full-duplex links
|
||||
b1000baseX(12), -- 1000BASE-X, -LX, -SX, -CX half
|
||||
-- duplex mode
|
||||
b1000baseXFD(13), -- 1000BASE-X, -LX, -SX, -CX full
|
||||
-- duplex mode
|
||||
b1000baseT(14), -- 1000BASE-T half duplex mode
|
||||
b1000baseTFD(15) -- 1000BASE-T full duplex mode
|
||||
}
|
||||
|
||||
IANAifJackType ::= TEXTUAL-CONVENTION
|
||||
STATUS current
|
||||
|
||||
DESCRIPTION
|
||||
"Common enumeration values for repeater and interface MAU
|
||||
jack types. This data type is used as the syntax of the
|
||||
ifJackType and rpJackType objects in the (updated) definition
|
||||
of MAU-MIB's ifJackTable and rpJackTable respectively.
|
||||
|
||||
Possible values are:
|
||||
other(1) - undefined or unknown
|
||||
rj45(2) - RJ45
|
||||
rj45S(3) - RJ45 shielded
|
||||
db9(4) - DB9
|
||||
bnc(5) - BNC
|
||||
fAUI(6) - AUI female
|
||||
mAUI(7) - AUI male
|
||||
fiberSC(8) - SC fiber
|
||||
fiberMIC(9) - MIC fiber
|
||||
fiberST(10) - ST fiber
|
||||
telco(11) - Telco
|
||||
mtrj(12) - MT-RJ fiber
|
||||
hssdc(13) - fiber channel style-2
|
||||
fiberLC(14) - LC fiber
|
||||
cx4(15) - IB4X for 10GBASE-CX4
|
||||
|
||||
The most recent version of this textual convention is available
|
||||
in the online version of this MIB module on the IANA web site.
|
||||
|
||||
Requests for new values should be made to IANA via email
|
||||
(iana&iana.org)."
|
||||
SYNTAX INTEGER {
|
||||
other(1),
|
||||
rj45(2),
|
||||
rj45S(3),
|
||||
db9(4),
|
||||
bnc(5),
|
||||
fAUI(6),
|
||||
mAUI(7),
|
||||
fiberSC(8),
|
||||
fiberMIC(9),
|
||||
fiberST(10),
|
||||
telco(11),
|
||||
mtrj(12),
|
||||
hssdc(13),
|
||||
fiberLC(14),
|
||||
-- new since RFC 3636
|
||||
cx4(15)
|
||||
}
|
||||
|
||||
-- OBJECT IDENTITIES for MAU types
|
||||
|
||||
-- (see rpMauType and ifMauType of MAU-MIB for usage)
|
||||
-- The following definitions has been moved from RFC 3636 and
|
||||
-- no longer appear in its revision.
|
||||
|
||||
dot3MauType OBJECT IDENTIFIER ::= { mib-2 snmpDot3MauMgt(26) 4 }
|
||||
|
||||
dot3MauTypeAUI OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "no internal MAU, view from AUI"
|
||||
REFERENCE "[IEEE802.3], Section 7"
|
||||
::= { dot3MauType 1 }
|
||||
|
||||
dot3MauType10Base5 OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "thick coax MAU"
|
||||
REFERENCE "[IEEE802.3], Section 7"
|
||||
::= { dot3MauType 2 }
|
||||
|
||||
dot3MauTypeFoirl OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "FOIRL MAU"
|
||||
REFERENCE "[IEEE802.3], Section 9.9"
|
||||
::= { dot3MauType 3 }
|
||||
|
||||
dot3MauType10Base2 OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "thin coax MAU"
|
||||
REFERENCE "[IEEE802.3], Section 10"
|
||||
::= { dot3MauType 4 }
|
||||
|
||||
dot3MauType10BaseT OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "UTP MAU.
|
||||
Note that it is strongly recommended that
|
||||
agents return either dot3MauType10BaseTHD or
|
||||
dot3MauType10BaseTFD if the duplex mode is
|
||||
known. However, management applications should
|
||||
be prepared to receive this MAU type value from
|
||||
older agent implementations."
|
||||
REFERENCE "[IEEE802.3], Section 14"
|
||||
::= { dot3MauType 5 }
|
||||
|
||||
dot3MauType10BaseFP OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "passive fiber MAU"
|
||||
REFERENCE "[IEEE802.3], Section 16"
|
||||
::= { dot3MauType 6 }
|
||||
|
||||
dot3MauType10BaseFB OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "sync fiber MAU"
|
||||
REFERENCE "[IEEE802.3], Section 17"
|
||||
::= { dot3MauType 7 }
|
||||
|
||||
dot3MauType10BaseFL OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "async fiber MAU.
|
||||
Note that it is strongly recommended that
|
||||
agents return either dot3MauType10BaseFLHD or
|
||||
dot3MauType10BaseFLFD if the duplex mode is
|
||||
known. However, management applications should
|
||||
be prepared to receive this MAU type value from
|
||||
older agent implementations."
|
||||
REFERENCE "[IEEE802.3], Section 18"
|
||||
::= { dot3MauType 8 }
|
||||
|
||||
dot3MauType10Broad36 OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "broadband DTE MAU.
|
||||
Note that 10BROAD36 MAUs can be attached to
|
||||
interfaces but not to repeaters."
|
||||
REFERENCE "[IEEE802.3], Section 11"
|
||||
::= { dot3MauType 9 }
|
||||
|
||||
------ new since RFC 1515:
|
||||
dot3MauType10BaseTHD OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "UTP MAU, half duplex mode"
|
||||
REFERENCE "[IEEE802.3], Section 14"
|
||||
::= { dot3MauType 10 }
|
||||
|
||||
dot3MauType10BaseTFD OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "UTP MAU, full duplex mode"
|
||||
REFERENCE "[IEEE802.3], Section 14"
|
||||
::= { dot3MauType 11 }
|
||||
|
||||
dot3MauType10BaseFLHD OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "async fiber MAU, half duplex mode"
|
||||
REFERENCE "[IEEE802.3], Section 18"
|
||||
::= { dot3MauType 12 }
|
||||
|
||||
dot3MauType10BaseFLFD OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "async fiber MAU, full duplex mode"
|
||||
|
||||
REFERENCE "[IEEE802.3], Section 18"
|
||||
::= { dot3MauType 13 }
|
||||
|
||||
dot3MauType100BaseT4 OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "4 pair category 3 UTP"
|
||||
REFERENCE "[IEEE802.3], Section 23"
|
||||
::= { dot3MauType 14 }
|
||||
|
||||
dot3MauType100BaseTXHD OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "2 pair category 5 UTP, half duplex mode"
|
||||
REFERENCE "[IEEE802.3], Section 25"
|
||||
::= { dot3MauType 15 }
|
||||
|
||||
dot3MauType100BaseTXFD OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "2 pair category 5 UTP, full duplex mode"
|
||||
REFERENCE "[IEEE802.3], Section 25"
|
||||
::= { dot3MauType 16 }
|
||||
|
||||
dot3MauType100BaseFXHD OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "X fiber over PMT, half duplex mode"
|
||||
REFERENCE "[IEEE802.3], Section 26"
|
||||
::= { dot3MauType 17 }
|
||||
|
||||
dot3MauType100BaseFXFD OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "X fiber over PMT, full duplex mode"
|
||||
REFERENCE "[IEEE802.3], Section 26"
|
||||
::= { dot3MauType 18 }
|
||||
|
||||
dot3MauType100BaseT2HD OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "2 pair category 3 UTP, half duplex mode"
|
||||
REFERENCE "[IEEE802.3], Section 32"
|
||||
::= { dot3MauType 19 }
|
||||
|
||||
dot3MauType100BaseT2FD OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "2 pair category 3 UTP, full duplex mode"
|
||||
REFERENCE "[IEEE802.3], Section 32"
|
||||
::= { dot3MauType 20 }
|
||||
|
||||
------ new since RFC 2239:
|
||||
dot3MauType1000BaseXHD OBJECT-IDENTITY
|
||||
STATUS current
|
||||
|
||||
DESCRIPTION "PCS/PMA, unknown PMD, half duplex mode"
|
||||
REFERENCE "[IEEE802.3], Section 36"
|
||||
::= { dot3MauType 21 }
|
||||
|
||||
dot3MauType1000BaseXFD OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "PCS/PMA, unknown PMD, full duplex mode"
|
||||
REFERENCE "[IEEE802.3], Section 36"
|
||||
::= { dot3MauType 22 }
|
||||
|
||||
dot3MauType1000BaseLXHD OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "Fiber over long-wavelength laser, half duplex
|
||||
mode"
|
||||
REFERENCE "[IEEE802.3], Section 38"
|
||||
::= { dot3MauType 23 }
|
||||
|
||||
dot3MauType1000BaseLXFD OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "Fiber over long-wavelength laser, full duplex
|
||||
mode"
|
||||
REFERENCE "[IEEE802.3], Section 38"
|
||||
::= { dot3MauType 24 }
|
||||
|
||||
dot3MauType1000BaseSXHD OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "Fiber over short-wavelength laser, half
|
||||
duplex mode"
|
||||
REFERENCE "[IEEE802.3], Section 38"
|
||||
::= { dot3MauType 25 }
|
||||
|
||||
dot3MauType1000BaseSXFD OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "Fiber over short-wavelength laser, full
|
||||
duplex mode"
|
||||
REFERENCE "[IEEE802.3], Section 38"
|
||||
::= { dot3MauType 26 }
|
||||
|
||||
dot3MauType1000BaseCXHD OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "Copper over 150-Ohm balanced cable, half
|
||||
duplex mode"
|
||||
REFERENCE "[IEEE802.3], Section 39"
|
||||
::= { dot3MauType 27 }
|
||||
|
||||
dot3MauType1000BaseCXFD OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "Copper over 150-Ohm balanced cable, full
|
||||
|
||||
duplex mode"
|
||||
REFERENCE "[IEEE802.3], Section 39"
|
||||
::= { dot3MauType 28 }
|
||||
|
||||
dot3MauType1000BaseTHD OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "Four-pair Category 5 UTP, half duplex mode"
|
||||
REFERENCE "[IEEE802.3], Section 40"
|
||||
::= { dot3MauType 29 }
|
||||
|
||||
dot3MauType1000BaseTFD OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "Four-pair Category 5 UTP, full duplex mode"
|
||||
REFERENCE "[IEEE802.3], Section 40"
|
||||
::= { dot3MauType 30 }
|
||||
|
||||
------ new since RFC 2668:
|
||||
dot3MauType10GigBaseX OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "X PCS/PMA, unknown PMD."
|
||||
REFERENCE "[IEEE802.3], Section 48"
|
||||
::= { dot3MauType 31 }
|
||||
|
||||
dot3MauType10GigBaseLX4 OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "X fiber over WWDM optics"
|
||||
REFERENCE "[IEEE802.3], Section 53"
|
||||
::= { dot3MauType 32 }
|
||||
|
||||
dot3MauType10GigBaseR OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "R PCS/PMA, unknown PMD."
|
||||
REFERENCE "[IEEE802.3], Section 49"
|
||||
::= { dot3MauType 33 }
|
||||
|
||||
dot3MauType10GigBaseER OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "R fiber over 1550 nm optics"
|
||||
REFERENCE "[IEEE802.3], Section 52"
|
||||
::= { dot3MauType 34 }
|
||||
|
||||
dot3MauType10GigBaseLR OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "R fiber over 1310 nm optics"
|
||||
REFERENCE "[IEEE802.3], Section 52"
|
||||
::= { dot3MauType 35 }
|
||||
|
||||
dot3MauType10GigBaseSR OBJECT-IDENTITY
|
||||
|
||||
STATUS current
|
||||
DESCRIPTION "R fiber over 850 nm optics"
|
||||
REFERENCE "[IEEE802.3], Section 52"
|
||||
::= { dot3MauType 36 }
|
||||
|
||||
dot3MauType10GigBaseW OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "W PCS/PMA, unknown PMD."
|
||||
REFERENCE "[IEEE802.3], Section 49 and 50"
|
||||
::= { dot3MauType 37 }
|
||||
|
||||
dot3MauType10GigBaseEW OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "W fiber over 1550 nm optics"
|
||||
REFERENCE "[IEEE802.3], Section 52"
|
||||
::= { dot3MauType 38 }
|
||||
|
||||
dot3MauType10GigBaseLW OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "W fiber over 1310 nm optics"
|
||||
REFERENCE "[IEEE802.3], Section 52"
|
||||
::= { dot3MauType 39 }
|
||||
|
||||
dot3MauType10GigBaseSW OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "W fiber over 850 nm optics"
|
||||
REFERENCE "[IEEE802.3], Section 52"
|
||||
::= { dot3MauType 40 }
|
||||
|
||||
------ new since RFC 3636:
|
||||
dot3MauType10GigBaseCX4 OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "X copper over 8 pair 100-Ohm balanced cable"
|
||||
REFERENCE "[IEEE802.3], Section 54"
|
||||
::= { dot3MauType 41 }
|
||||
|
||||
dot3MauType2BaseTL OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "Voice grade UTP copper, up to 2700m, optional PAF"
|
||||
REFERENCE "[IEEE802.3], Sections 61 and 63"
|
||||
::= { dot3MauType 42 }
|
||||
|
||||
dot3MauType10PassTS OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "Voice grade UTP copper, up to 750m, optional PAF"
|
||||
REFERENCE "[IEEE802.3], Sections 61 and 62"
|
||||
::= { dot3MauType 43 }
|
||||
|
||||
dot3MauType100BaseBX10D OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "One single-mode fiber OLT, long wavelength, 10km"
|
||||
REFERENCE "[IEEE802.3], Section 58"
|
||||
::= { dot3MauType 44 }
|
||||
|
||||
dot3MauType100BaseBX10U OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "One single-mode fiber ONU, long wavelength, 10km"
|
||||
REFERENCE "[IEEE802.3], Section 58"
|
||||
::= { dot3MauType 45 }
|
||||
|
||||
dot3MauType100BaseLX10 OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "Two single-mode fibers, long wavelength, 10km"
|
||||
REFERENCE "[IEEE802.3], Section 58"
|
||||
::= { dot3MauType 46 }
|
||||
|
||||
dot3MauType1000BaseBX10D OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "One single-mode fiber OLT, long wavelength, 10km"
|
||||
REFERENCE "[IEEE802.3], Section 59"
|
||||
::= { dot3MauType 47 }
|
||||
|
||||
dot3MauType1000BaseBX10U OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "One single-mode fiber ONU, long wavelength, 10km"
|
||||
REFERENCE "[IEEE802.3], Section 59"
|
||||
::= { dot3MauType 48 }
|
||||
|
||||
dot3MauType1000BaseLX10 OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "Two sigle-mode fiber, long wavelength, 10km"
|
||||
REFERENCE "[IEEE802.3], Section 59"
|
||||
::= { dot3MauType 49 }
|
||||
|
||||
dot3MauType1000BasePX10D OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "One single-mode fiber EPON OLT, 10km"
|
||||
REFERENCE "[IEEE802.3], Section 60"
|
||||
::= { dot3MauType 50 }
|
||||
|
||||
dot3MauType1000BasePX10U OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "One single-mode fiber EPON ONU, 10km"
|
||||
REFERENCE "[IEEE802.3], Section 60"
|
||||
::= { dot3MauType 51 }
|
||||
|
||||
dot3MauType1000BasePX20D OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "One single-mode fiber EPON OLT, 20km"
|
||||
REFERENCE "[IEEE802.3], Section 60"
|
||||
::= { dot3MauType 52 }
|
||||
|
||||
dot3MauType1000BasePX20U OBJECT-IDENTITY
|
||||
STATUS current
|
||||
DESCRIPTION "One single-mode fiber EPON ONU, 20km"
|
||||
REFERENCE "[IEEE802.3], Section 60"
|
||||
::= { dot3MauType 53 }
|
||||
|
||||
END
|
||||
1319
contrib/apps/LwipMibCompiler/Mibs/IANA/IANA-PRINTER-MIB
Normal file
1319
contrib/apps/LwipMibCompiler/Mibs/IANA/IANA-PRINTER-MIB
Normal file
File diff suppressed because it is too large
Load Diff
92
contrib/apps/LwipMibCompiler/Mibs/IANA/IANA-RTPROTO-MIB
Normal file
92
contrib/apps/LwipMibCompiler/Mibs/IANA/IANA-RTPROTO-MIB
Normal file
@@ -0,0 +1,92 @@
|
||||
|
||||
IANA-RTPROTO-MIB DEFINITIONS ::= BEGIN
|
||||
|
||||
IMPORTS
|
||||
MODULE-IDENTITY, mib-2 FROM SNMPv2-SMI
|
||||
TEXTUAL-CONVENTION FROM SNMPv2-TC;
|
||||
|
||||
ianaRtProtoMIB MODULE-IDENTITY
|
||||
LAST-UPDATED "200009260000Z" -- September 26, 2000
|
||||
ORGANIZATION "IANA"
|
||||
CONTACT-INFO
|
||||
" Internet Assigned Numbers Authority
|
||||
Internet Corporation for Assigned Names and Numbers
|
||||
4676 Admiralty Way, Suite 330
|
||||
Marina del Rey, CA 90292-6601
|
||||
|
||||
Phone: +1 310 823 9358
|
||||
EMail: iana&iana.org"
|
||||
DESCRIPTION
|
||||
"This MIB module defines the IANAipRouteProtocol and
|
||||
IANAipMRouteProtocol textual conventions for use in MIBs
|
||||
which need to identify unicast or multicast routing
|
||||
mechanisms.
|
||||
|
||||
Any additions or changes to the contents of this MIB module
|
||||
require either publication of an RFC, or Designated Expert
|
||||
Review as defined in RFC 2434, Guidelines for Writing an
|
||||
IANA Considerations Section in RFCs. The Designated Expert
|
||||
will be selected by the IESG Area Director(s) of the Routing
|
||||
Area."
|
||||
|
||||
REVISION "200009260000Z" -- September 26, 2000
|
||||
DESCRIPTION "Original version, published in coordination
|
||||
with RFC 2932."
|
||||
|
||||
::= { mib-2 84 }
|
||||
|
||||
IANAipRouteProtocol ::= TEXTUAL-CONVENTION
|
||||
STATUS current
|
||||
|
||||
DESCRIPTION
|
||||
"A mechanism for learning routes. Inclusion of values for
|
||||
routing protocols is not intended to imply that those
|
||||
protocols need be supported."
|
||||
SYNTAX INTEGER {
|
||||
other (1), -- not specified
|
||||
local (2), -- local interface
|
||||
netmgmt (3), -- static route
|
||||
icmp (4), -- result of ICMP Redirect
|
||||
|
||||
-- the following are all dynamic
|
||||
-- routing protocols
|
||||
|
||||
egp (5), -- Exterior Gateway Protocol
|
||||
ggp (6), -- Gateway-Gateway Protocol
|
||||
hello (7), -- FuzzBall HelloSpeak
|
||||
rip (8), -- Berkeley RIP or RIP-II
|
||||
isIs (9), -- Dual IS-IS
|
||||
esIs (10), -- ISO 9542
|
||||
ciscoIgrp (11), -- Cisco IGRP
|
||||
bbnSpfIgp (12), -- BBN SPF IGP
|
||||
ospf (13), -- Open Shortest Path First
|
||||
bgp (14), -- Border Gateway Protocol
|
||||
idpr (15), -- InterDomain Policy Routing
|
||||
ciscoEigrp (16), -- Cisco EIGRP
|
||||
dvmrp (17) -- DVMRP
|
||||
}
|
||||
|
||||
IANAipMRouteProtocol ::= TEXTUAL-CONVENTION
|
||||
STATUS current
|
||||
DESCRIPTION
|
||||
"The multicast routing protocol. Inclusion of values for
|
||||
multicast routing protocols is not intended to imply that
|
||||
those protocols need be supported."
|
||||
SYNTAX INTEGER {
|
||||
other(1), -- none of the following
|
||||
local(2), -- e.g., manually configured
|
||||
netmgmt(3), -- set via net.mgmt protocol
|
||||
dvmrp(4),
|
||||
mospf(5),
|
||||
pimSparseDense(6), -- PIMv1, both DM and SM
|
||||
cbt(7),
|
||||
pimSparseMode(8), -- PIM-SM
|
||||
pimDenseMode(9), -- PIM-DM
|
||||
igmpOnly(10),
|
||||
bgmp(11),
|
||||
msdp(12)
|
||||
}
|
||||
|
||||
END
|
||||
|
||||
|
||||
306
contrib/apps/LwipMibCompiler/Mibs/IANA/IANATn3270eTC-MIB
Normal file
306
contrib/apps/LwipMibCompiler/Mibs/IANA/IANATn3270eTC-MIB
Normal file
@@ -0,0 +1,306 @@
|
||||
|
||||
IANATn3270eTC-MIB DEFINITIONS ::= BEGIN
|
||||
|
||||
IMPORTS
|
||||
MODULE-IDENTITY, mib-2
|
||||
FROM SNMPv2-SMI
|
||||
TEXTUAL-CONVENTION
|
||||
FROM SNMPv2-TC;
|
||||
|
||||
ianaTn3270eTcMib MODULE-IDENTITY
|
||||
LAST-UPDATED "200005100000Z" -- May 10, 2000
|
||||
ORGANIZATION "IANA"
|
||||
CONTACT-INFO
|
||||
"Internet Assigned Numbers Authority
|
||||
|
||||
Postal: ICANN
|
||||
4676 Admiralty Way, Suite 330
|
||||
Marina del Rey, CA 90292
|
||||
|
||||
Tel: +1 310 823 9358 x20
|
||||
E-Mail: iana&iana.org"
|
||||
DESCRIPTION
|
||||
"This module defines a set of textual conventions
|
||||
for use by the TN3270E-MIB and the TN3270E-RT-MIB.
|
||||
|
||||
Any additions or changes to the contents of this
|
||||
MIB module must first be discussed on the tn3270e
|
||||
working group list at: tn3270e&list.nih.gov
|
||||
and approved by one of the following TN3270E
|
||||
working group contacts:
|
||||
|
||||
Ed Bailey (co-chair) - elbailey&us.ibm.com
|
||||
Michael Boe (co-chair) - mboe&cisco.com
|
||||
Ken White - kennethw&vnet.ibm.com
|
||||
Robert Moore - remoore&us.ibm.com
|
||||
|
||||
The above list of contacts can be altered with
|
||||
the approval of the two co-chairs.
|
||||
|
||||
The Textual Conventions defined within this MIB have
|
||||
no security issues associated with them unless
|
||||
explicitly stated in their corresponding
|
||||
DESCRIPTION clause."
|
||||
|
||||
-- revision log, in reverse chronological order
|
||||
|
||||
REVISION "200005100000Z" -- May 10, 2000
|
||||
DESCRIPTION "Fix to import mib-2 instead of experimental."
|
||||
|
||||
REVISION "199909011000Z" -- September 1, 1999
|
||||
DESCRIPTION
|
||||
"Initial version transferred from the TN3270E
|
||||
working group to IANA."
|
||||
|
||||
::= { mib-2 61 }
|
||||
|
||||
|
||||
-- Textual Conventions
|
||||
|
||||
IANATn3270eAddrType ::= TEXTUAL-CONVENTION
|
||||
STATUS current
|
||||
DESCRIPTION
|
||||
"The textual convention for defining the type of a
|
||||
client address. The enumeration value unknown(0) is
|
||||
also used to indicate that no actual address is present."
|
||||
SYNTAX INTEGER {
|
||||
unknown(0),
|
||||
ipv4(1),
|
||||
ipv6(2)
|
||||
}
|
||||
|
||||
IANATn3270eAddress ::= TEXTUAL-CONVENTION
|
||||
STATUS current
|
||||
DESCRIPTION
|
||||
"Denotes a client address. The type of client address is
|
||||
determined by use of the IANATn3270eAddrType textual
|
||||
convention.
|
||||
The length in octets of a IANATn3270eAddress object is:
|
||||
|
||||
IANATn3270eAddrType Address Length
|
||||
+++++++++++++++++++ ++++++++++++++
|
||||
unknown(0) not specified or unknown; the
|
||||
actual length of the
|
||||
IANATn3270eAddress octet string
|
||||
indicates if an address
|
||||
is present
|
||||
ipv4(1) 4 OCTETS
|
||||
ipv6(2) 16 OCTETS
|
||||
|
||||
This textual convention is similar to the TAddress
|
||||
TC defined by RFC1903 except that it allows a
|
||||
zero-length octet string and is not a full transport
|
||||
layer address."
|
||||
SYNTAX OCTET STRING (SIZE (0..255))
|
||||
|
||||
IANATn3270eClientType ::= TEXTUAL-CONVENTION
|
||||
STATUS current
|
||||
DESCRIPTION
|
||||
"The textual convention for defining the set of
|
||||
enumerations used by tn3270eTcpConnClientIdFormat
|
||||
in the TN3270E-MIB:
|
||||
|
||||
ENUMERATION OCTETs DESCRIPTION
|
||||
|
||||
none(1) 0 Not specified
|
||||
other(2) 1..512 Implementation specific
|
||||
ipv4(3) 6 4-octet IP Address plus
|
||||
2-octet TCP Port
|
||||
ipv6(4) 18 16-octet IPv6 Address
|
||||
plus 2-octet TCP Port
|
||||
domainName(5) 1..512 The DNS name of a
|
||||
client.
|
||||
truncDomainName(6) 1..512 The (truncated) DNS name
|
||||
of a client.
|
||||
string(7) 1..512 Unknown Utf8String
|
||||
certificate(8) 1..512 certificate
|
||||
userId(9) 1..8 Client's userid
|
||||
x509dn(10) 1..512 X.509 Distinguished Name
|
||||
|
||||
Representation of a certificate(8) may be lead to
|
||||
a security exposure and is NOT RECOMMENDED without
|
||||
adequate security."
|
||||
SYNTAX INTEGER {
|
||||
none(1),
|
||||
other(2),
|
||||
ipv4(3),
|
||||
ipv6(4),
|
||||
domainName(5),
|
||||
truncDomainName(6),
|
||||
string(7),
|
||||
certificate(8),
|
||||
userId(9),
|
||||
x509dn(10)
|
||||
}
|
||||
|
||||
IANATn3270Functions ::= TEXTUAL-CONVENTION
|
||||
STATUS current
|
||||
DESCRIPTION
|
||||
"This textual convention reflects the current set of
|
||||
TN3270 and TN3270E functions that can be negotiated
|
||||
between a server and its client:
|
||||
|
||||
RFC856
|
||||
transmitBinary The sender of this command REQUESTS
|
||||
permission to begin transmitting, or
|
||||
confirms that it will now begin
|
||||
transmitting characters which are to
|
||||
be interpreted as 8 bits of binary
|
||||
data by the receiver of the data.
|
||||
RFC860
|
||||
timingMark The sender of this command REQUESTS
|
||||
that the receiver of this command
|
||||
return a WILL TIMING-MARK in the data
|
||||
stream at the 'appropriate place'.
|
||||
RFC885
|
||||
endOfRecord The sender of this command requests
|
||||
permission to begin transmission of
|
||||
the Telnet END-OF-RECORD (EOR) code
|
||||
when transmitting data characters, or
|
||||
the sender of this command confirms it
|
||||
will now begin transmission of EORs
|
||||
with transmitted data characters.
|
||||
RFC1091
|
||||
terminalType Sender is willing to send terminal
|
||||
type information in a subsequent
|
||||
sub-negotiation.
|
||||
|
||||
RFC1041
|
||||
tn3270Regime Sender is willing to send list of
|
||||
supported 3270 Regimes in a
|
||||
subsequent sub-negotiation.
|
||||
RFC2355
|
||||
scsCtlCodes (Printer sessions only). Allows the
|
||||
use of the SNA Character Stream (SCS)
|
||||
and SCS control codes on the session.
|
||||
SCS is used with LU type 1 SNA sessions.
|
||||
dataStreamCtl (Printer sessions only). Allows the use
|
||||
of the standard 3270 data stream. This
|
||||
corresponds to LU type 3 SNA sessions.
|
||||
responses Provides support for positive and
|
||||
negative response handling. Allows the
|
||||
server to reflect to the client any and
|
||||
all definite, exception, and no response
|
||||
requests sent by the host application.
|
||||
bindImage Allows the server to send the SNA Bind
|
||||
image and Unbind notification to the
|
||||
client.
|
||||
sysreq Allows the client and server to emulate
|
||||
some (or all, depending on the server) of
|
||||
the functions of the SYSREQ key in an SNA
|
||||
environment."
|
||||
SYNTAX BITS {
|
||||
transmitBinary(0),-- rfc856
|
||||
timemark(1), -- rfc860
|
||||
endOfRecord(2), -- rfc885
|
||||
terminalType(3), -- rfc1091
|
||||
tn3270Regime(4), -- rfc1041
|
||||
scsCtlCodes(5), -- rfc2355
|
||||
dataStreamCtl(6), -- rfc2355
|
||||
responses(7), -- rfc2355
|
||||
bindImage(8), -- rfc2355
|
||||
sysreq(9) -- rfc2355
|
||||
}
|
||||
|
||||
IANATn3270ResourceType ::= TEXTUAL-CONVENTION
|
||||
STATUS current
|
||||
DESCRIPTION
|
||||
"The type of resource defined by a resource pool. Refer
|
||||
to tn3270eResPoolTable."
|
||||
SYNTAX INTEGER {
|
||||
other(1),
|
||||
terminal(2),
|
||||
printer(3),
|
||||
terminalOrPrinter(4)
|
||||
}
|
||||
|
||||
IANATn3270DeviceType ::= TEXTUAL-CONVENTION
|
||||
STATUS current
|
||||
DESCRIPTION
|
||||
"This textual convention defines the list of device
|
||||
types that can be set, as defined by RFC 2355."
|
||||
SYNTAX INTEGER {
|
||||
-- terminals
|
||||
ibm3278d2(1), -- (24 row x 80 col display)
|
||||
ibm3278d2E(2), -- (24 row x 80 col display)
|
||||
ibm3278d3(3), -- (32 row x 80 col display)
|
||||
ibm3278d3E(4), -- (32 row x 80 col display)
|
||||
ibm3278d4(5), -- (43 row x 80 col display)
|
||||
ibm3278d4E(6), -- (43 row x 80 col display)
|
||||
ibm3278d5(7), -- (27 row x 132 col display)
|
||||
ibm3278d5E(8), -- (27 row x 132 col display)
|
||||
ibmDynamic(9), -- (no pre-defined display size)
|
||||
|
||||
-- printers
|
||||
ibm3287d1(10),
|
||||
|
||||
unknown(100)
|
||||
}
|
||||
|
||||
IANATn3270eLogData ::= TEXTUAL-CONVENTION
|
||||
STATUS current
|
||||
DESCRIPTION
|
||||
"An octet string representing log data as pertaining to
|
||||
either a TN3270 or TN3270E Session as reported from a
|
||||
TN3270E Server. Log data is stored in an octet string
|
||||
in time order (from earliest to latest).
|
||||
|
||||
Each log element has the following form:
|
||||
|
||||
+------+----+---------+------------+
|
||||
!length!type!TimeStamp! data !
|
||||
+------+----+---------+------------+
|
||||
|
||||
where
|
||||
|
||||
length = one-octet length of the data portion of the
|
||||
trace element, not including the length,
|
||||
type, and TimeStamp fields
|
||||
type = one-octet code point characterizing the data.
|
||||
TimeStamp = A 4-octet field representing the number of
|
||||
TimeTicks since the TN3270E server was last
|
||||
activated. The server's last activation time
|
||||
is available in the tn3270eSrvrConfLastActTime
|
||||
object in the TN3270E MIB, which has the
|
||||
syntax DateAndTime.
|
||||
data = initial part of a PDU.
|
||||
|
||||
length type
|
||||
|
||||
0-255 x'00' - unknown
|
||||
0 x'01' - inactivity timer expired
|
||||
0 x'02' - dynamic timer expired
|
||||
0 x'03' - actlu req
|
||||
0 x'04' - bind req
|
||||
0 x'05' - clear req
|
||||
0 x'06' - dactlu req
|
||||
0 x'07' - warm actpu req
|
||||
0 x'08' - sdt req
|
||||
0 x'09' - unbind req
|
||||
0 x'0A' - notify resp
|
||||
0 x'0B' - reply PSID neg rsp
|
||||
0 x'0C' - reply PSID pos rsp
|
||||
0 x'0D' - unbind rsp
|
||||
0 x'0E' - hierarchical reset
|
||||
0 x'0F' - client connect req
|
||||
0 x'10' - client disconnect req
|
||||
0 x'11' - timingmark received
|
||||
0 x'12' - flowControl timer expired
|
||||
0 x'13' - neg rsp to host
|
||||
0 x'14' - neg rsp from host
|
||||
0 x'15' - data contention
|
||||
0 x'16' - no buffer to send SNA data
|
||||
0 x'17' - receive response while inbound
|
||||
0 x'18' - client protocol error
|
||||
0 x'19' - badClientSequenceReceived
|
||||
1-255 x'1A' - utf8String
|
||||
2 x'1B' - hexCode, implementation dependent
|
||||
|
||||
Log element entries have a minimum length of 6 octets.
|
||||
The zero-length string indicates that no log data is
|
||||
available."
|
||||
SYNTAX OCTET STRING (SIZE (0 | 6..2048))
|
||||
|
||||
END
|
||||
|
||||
|
||||
572
contrib/apps/LwipMibCompiler/Mibs/IANA/IANAifType-MIB
Normal file
572
contrib/apps/LwipMibCompiler/Mibs/IANA/IANAifType-MIB
Normal file
@@ -0,0 +1,572 @@
|
||||
IANAifType-MIB DEFINITIONS ::= BEGIN
|
||||
|
||||
IMPORTS
|
||||
MODULE-IDENTITY, mib-2 FROM SNMPv2-SMI
|
||||
TEXTUAL-CONVENTION FROM SNMPv2-TC;
|
||||
|
||||
ianaifType MODULE-IDENTITY
|
||||
LAST-UPDATED "200709130000Z" -- September 13, 2007
|
||||
ORGANIZATION "IANA"
|
||||
CONTACT-INFO " Internet Assigned Numbers Authority
|
||||
|
||||
Postal: ICANN
|
||||
4676 Admiralty Way, Suite 330
|
||||
Marina del Rey, CA 90292
|
||||
|
||||
Tel: +1 310 823 9358
|
||||
E-Mail: iana&iana.org"
|
||||
|
||||
DESCRIPTION "This MIB module defines the IANAifType Textual
|
||||
Convention, and thus the enumerated values of
|
||||
the ifType object defined in MIB-II's ifTable."
|
||||
|
||||
REVISION "200709130000Z" -- September 13, 2007
|
||||
DESCRIPTION "Registration of new IANAifTypes 243 and 244."
|
||||
|
||||
REVISION "200705290000Z" -- May 29, 2007
|
||||
DESCRIPTION "Changed the description for IANAifType 228."
|
||||
|
||||
REVISION "200703080000Z" -- March 08, 2007
|
||||
DESCRIPTION "Registration of new IANAifType 242."
|
||||
|
||||
REVISION "200701230000Z" -- January 23, 2007
|
||||
DESCRIPTION "Registration of new IANAifTypes 239, 240, and 241."
|
||||
|
||||
REVISION "200610170000Z" -- October 17, 2006
|
||||
DESCRIPTION "Deprecated/Obsoleted IANAifType 230. Registration of
|
||||
IANAifType 238."
|
||||
|
||||
REVISION "200609250000Z" -- September 25, 2006
|
||||
DESCRIPTION "Changed the description for IANA ifType
|
||||
184 and added new IANA ifType 237."
|
||||
|
||||
REVISION "200608170000Z" -- August 17, 2006
|
||||
DESCRIPTION "Changed the descriptions for IANAifTypes
|
||||
20 and 21."
|
||||
|
||||
REVISION "200608110000Z" -- August 11, 2006
|
||||
DESCRIPTION "Changed the descriptions for IANAifTypes
|
||||
7, 11, 62, 69, and 117."
|
||||
|
||||
REVISION "200607250000Z" -- July 25, 2006
|
||||
DESCRIPTION "Registration of new IANA ifType 236."
|
||||
|
||||
REVISION "200606140000Z" -- June 14, 2006
|
||||
DESCRIPTION "Registration of new IANA ifType 235."
|
||||
|
||||
REVISION "200603310000Z" -- March 31, 2006
|
||||
DESCRIPTION "Registration of new IANA ifType 234."
|
||||
|
||||
REVISION "200603300000Z" -- March 30, 2006
|
||||
DESCRIPTION "Registration of new IANA ifType 233."
|
||||
|
||||
REVISION "200512220000Z" -- December 22, 2005
|
||||
DESCRIPTION "Registration of new IANA ifTypes 231 and 232."
|
||||
|
||||
REVISION "200510100000Z" -- October 10, 2005
|
||||
DESCRIPTION "Registration of new IANA ifType 230."
|
||||
|
||||
REVISION "200509090000Z" -- September 09, 2005
|
||||
DESCRIPTION "Registration of new IANA ifType 229."
|
||||
|
||||
REVISION "200505270000Z" -- May 27, 2005
|
||||
DESCRIPTION "Registration of new IANA ifType 228."
|
||||
|
||||
REVISION "200503030000Z" -- March 3, 2005
|
||||
DESCRIPTION "Added the IANAtunnelType TC and deprecated
|
||||
IANAifType sixToFour (215) per RFC4087."
|
||||
|
||||
REVISION "200411220000Z" -- November 22, 2004
|
||||
DESCRIPTION "Registration of new IANA ifType 227 per RFC4631."
|
||||
|
||||
REVISION "200406170000Z" -- June 17, 2004
|
||||
DESCRIPTION "Registration of new IANA ifType 226."
|
||||
|
||||
REVISION "200405120000Z" -- May 12, 2004
|
||||
DESCRIPTION "Added description for IANAifType 6, and
|
||||
changed the descriptions for IANAifTypes
|
||||
180, 181, and 182."
|
||||
|
||||
REVISION "200405070000Z" -- May 7, 2004
|
||||
DESCRIPTION "Registration of new IANAifType 225."
|
||||
|
||||
REVISION "200308250000Z" -- Aug 25, 2003
|
||||
DESCRIPTION "Deprecated IANAifTypes 7 and 11. Obsoleted
|
||||
IANAifTypes 62, 69, and 117. ethernetCsmacd (6)
|
||||
should be used instead of these values"
|
||||
|
||||
REVISION "200308180000Z" -- Aug 18, 2003
|
||||
DESCRIPTION "Registration of new IANAifType
|
||||
224."
|
||||
|
||||
REVISION "200308070000Z" -- Aug 7, 2003
|
||||
DESCRIPTION "Registration of new IANAifTypes
|
||||
222 and 223."
|
||||
|
||||
REVISION "200303180000Z" -- Mar 18, 2003
|
||||
DESCRIPTION "Registration of new IANAifType
|
||||
221."
|
||||
|
||||
REVISION "200301130000Z" -- Jan 13, 2003
|
||||
DESCRIPTION "Registration of new IANAifType
|
||||
220."
|
||||
|
||||
REVISION "200210170000Z" -- Oct 17, 2002
|
||||
DESCRIPTION "Registration of new IANAifType
|
||||
219."
|
||||
|
||||
REVISION "200207160000Z" -- Jul 16, 2002
|
||||
DESCRIPTION "Registration of new IANAifTypes
|
||||
217 and 218."
|
||||
|
||||
REVISION "200207100000Z" -- Jul 10, 2002
|
||||
DESCRIPTION "Registration of new IANAifTypes
|
||||
215 and 216."
|
||||
|
||||
REVISION "200206190000Z" -- Jun 19, 2002
|
||||
DESCRIPTION "Registration of new IANAifType
|
||||
214."
|
||||
|
||||
REVISION "200201040000Z" -- Jan 4, 2002
|
||||
DESCRIPTION "Registration of new IANAifTypes
|
||||
211, 212 and 213."
|
||||
|
||||
REVISION "200112200000Z" -- Dec 20, 2001
|
||||
DESCRIPTION "Registration of new IANAifTypes
|
||||
209 and 210."
|
||||
|
||||
REVISION "200111150000Z" -- Nov 15, 2001
|
||||
DESCRIPTION "Registration of new IANAifTypes
|
||||
207 and 208."
|
||||
|
||||
|
||||
REVISION "200111060000Z" -- Nov 6, 2001
|
||||
DESCRIPTION "Registration of new IANAifType
|
||||
206."
|
||||
|
||||
|
||||
REVISION "200111020000Z" -- Nov 2, 2001
|
||||
DESCRIPTION "Registration of new IANAifType
|
||||
205."
|
||||
|
||||
|
||||
REVISION "200110160000Z" -- Oct 16, 2001
|
||||
DESCRIPTION "Registration of new IANAifTypes
|
||||
199, 200, 201, 202, 203, and 204."
|
||||
|
||||
|
||||
REVISION "200109190000Z" -- Sept 19, 2001
|
||||
DESCRIPTION "Registration of new IANAifType
|
||||
198."
|
||||
|
||||
REVISION "200105110000Z" -- May 11, 2001
|
||||
DESCRIPTION "Registration of new IANAifType
|
||||
197."
|
||||
|
||||
|
||||
REVISION "200101120000Z" -- Jan 12, 2001
|
||||
DESCRIPTION "Registration of new IANAifTypes
|
||||
195 and 196."
|
||||
|
||||
REVISION "200012190000Z" -- Dec 19, 2000
|
||||
DESCRIPTION "Registration of new IANAifTypes
|
||||
193 and 194."
|
||||
|
||||
REVISION "200012070000Z" -- Dec 07, 2000
|
||||
DESCRIPTION "Registration of new IANAifTypes
|
||||
191 and 192."
|
||||
|
||||
REVISION "200012040000Z" -- Dec 04, 2000
|
||||
DESCRIPTION "Registration of new IANAifType
|
||||
190."
|
||||
|
||||
REVISION "200010170000Z" -- Oct 17, 2000
|
||||
DESCRIPTION "Registration of new IANAifTypes
|
||||
188 and 189."
|
||||
|
||||
REVISION "200010020000Z" -- Oct 02, 2000
|
||||
DESCRIPTION "Registration of new IANAifType 187."
|
||||
|
||||
REVISION "200009010000Z" -- Sept 01, 2000
|
||||
DESCRIPTION "Registration of new IANAifTypes
|
||||
184, 185, and 186."
|
||||
|
||||
REVISION "200008240000Z" -- Aug 24, 2000
|
||||
DESCRIPTION "Registration of new IANAifType 183."
|
||||
|
||||
REVISION "200008230000Z" -- Aug 23, 2000
|
||||
DESCRIPTION "Registration of new IANAifTypes
|
||||
174-182."
|
||||
|
||||
REVISION "200008220000Z" -- Aug 22, 2000
|
||||
DESCRIPTION "Registration of new IANAifTypes 170,
|
||||
171, 172 and 173."
|
||||
|
||||
REVISION "200004250000Z" -- Apr 25, 2000
|
||||
DESCRIPTION "Registration of new IANAifTypes 168 and 169."
|
||||
|
||||
REVISION "200003060000Z" -- Mar 6, 2000
|
||||
DESCRIPTION "Fixed a missing semi-colon in the IMPORT.
|
||||
Also cleaned up the REVISION log a bit.
|
||||
It is not complete, but from now on it will
|
||||
be maintained and kept up to date with each
|
||||
change to this MIB module."
|
||||
|
||||
REVISION "199910081430Z" -- Oct 08, 1999
|
||||
DESCRIPTION "Include new name assignments up to cnr(85).
|
||||
This is the first version available via the WWW
|
||||
at: ftp://ftp.isi.edu/mib/ianaiftype.mib"
|
||||
|
||||
REVISION "199401310000Z" -- Jan 31, 1994
|
||||
DESCRIPTION "Initial version of this MIB as published in
|
||||
RFC 1573."
|
||||
|
||||
::= { mib-2 30 }
|
||||
|
||||
|
||||
IANAifType ::= TEXTUAL-CONVENTION
|
||||
STATUS current
|
||||
DESCRIPTION
|
||||
"This data type is used as the syntax of the ifType
|
||||
object in the (updated) definition of MIB-II's
|
||||
ifTable.
|
||||
|
||||
The definition of this textual convention with the
|
||||
addition of newly assigned values is published
|
||||
periodically by the IANA, in either the Assigned
|
||||
Numbers RFC, or some derivative of it specific to
|
||||
Internet Network Management number assignments. (The
|
||||
latest arrangements can be obtained by contacting the
|
||||
IANA.)
|
||||
|
||||
Requests for new values should be made to IANA via
|
||||
email (iana&iana.org).
|
||||
|
||||
The relationship between the assignment of ifType
|
||||
values and of OIDs to particular media-specific MIBs
|
||||
is solely the purview of IANA and is subject to change
|
||||
without notice. Quite often, a media-specific MIB's
|
||||
OID-subtree assignment within MIB-II's 'transmission'
|
||||
subtree will be the same as its ifType value.
|
||||
However, in some circumstances this will not be the
|
||||
case, and implementors must not pre-assume any
|
||||
specific relationship between ifType values and
|
||||
transmission subtree OIDs."
|
||||
SYNTAX INTEGER {
|
||||
other(1), -- none of the following
|
||||
regular1822(2),
|
||||
hdh1822(3),
|
||||
ddnX25(4),
|
||||
rfc877x25(5),
|
||||
ethernetCsmacd(6), -- for all ethernet-like interfaces,
|
||||
-- regardless of speed, as per RFC3635
|
||||
iso88023Csmacd(7), -- Deprecated via RFC3635
|
||||
-- ethernetCsmacd (6) should be used instead
|
||||
iso88024TokenBus(8),
|
||||
iso88025TokenRing(9),
|
||||
iso88026Man(10),
|
||||
starLan(11), -- Deprecated via RFC3635
|
||||
-- ethernetCsmacd (6) should be used instead
|
||||
proteon10Mbit(12),
|
||||
proteon80Mbit(13),
|
||||
hyperchannel(14),
|
||||
fddi(15),
|
||||
lapb(16),
|
||||
sdlc(17),
|
||||
ds1(18), -- DS1-MIB
|
||||
e1(19), -- Obsolete see DS1-MIB
|
||||
basicISDN(20), -- no longer used
|
||||
-- see also RFC2127
|
||||
primaryISDN(21), -- no longer used
|
||||
-- see also RFC2127
|
||||
propPointToPointSerial(22), -- proprietary serial
|
||||
ppp(23),
|
||||
softwareLoopback(24),
|
||||
eon(25), -- CLNP over IP
|
||||
ethernet3Mbit(26),
|
||||
nsip(27), -- XNS over IP
|
||||
slip(28), -- generic SLIP
|
||||
ultra(29), -- ULTRA technologies
|
||||
ds3(30), -- DS3-MIB
|
||||
sip(31), -- SMDS, coffee
|
||||
frameRelay(32), -- DTE only.
|
||||
rs232(33),
|
||||
para(34), -- parallel-port
|
||||
arcnet(35), -- arcnet
|
||||
arcnetPlus(36), -- arcnet plus
|
||||
atm(37), -- ATM cells
|
||||
miox25(38),
|
||||
sonet(39), -- SONET or SDH
|
||||
x25ple(40),
|
||||
iso88022llc(41),
|
||||
localTalk(42),
|
||||
smdsDxi(43),
|
||||
frameRelayService(44), -- FRNETSERV-MIB
|
||||
v35(45),
|
||||
hssi(46),
|
||||
hippi(47),
|
||||
modem(48), -- Generic modem
|
||||
aal5(49), -- AAL5 over ATM
|
||||
sonetPath(50),
|
||||
sonetVT(51),
|
||||
smdsIcip(52), -- SMDS InterCarrier Interface
|
||||
propVirtual(53), -- proprietary virtual/internal
|
||||
propMultiplexor(54),-- proprietary multiplexing
|
||||
ieee80212(55), -- 100BaseVG
|
||||
fibreChannel(56), -- Fibre Channel
|
||||
hippiInterface(57), -- HIPPI interfaces
|
||||
frameRelayInterconnect(58), -- Obsolete use either
|
||||
-- frameRelay(32) or
|
||||
-- frameRelayService(44).
|
||||
aflane8023(59), -- ATM Emulated LAN for 802.3
|
||||
aflane8025(60), -- ATM Emulated LAN for 802.5
|
||||
cctEmul(61), -- ATM Emulated circuit
|
||||
fastEther(62), -- Obsoleted via RFC3635
|
||||
-- ethernetCsmacd (6) should be used instead
|
||||
isdn(63), -- ISDN and X.25
|
||||
v11(64), -- CCITT V.11/X.21
|
||||
v36(65), -- CCITT V.36
|
||||
g703at64k(66), -- CCITT G703 at 64Kbps
|
||||
g703at2mb(67), -- Obsolete see DS1-MIB
|
||||
qllc(68), -- SNA QLLC
|
||||
fastEtherFX(69), -- Obsoleted via RFC3635
|
||||
-- ethernetCsmacd (6) should be used instead
|
||||
channel(70), -- channel
|
||||
ieee80211(71), -- radio spread spectrum
|
||||
ibm370parChan(72), -- IBM System 360/370 OEMI Channel
|
||||
escon(73), -- IBM Enterprise Systems Connection
|
||||
dlsw(74), -- Data Link Switching
|
||||
isdns(75), -- ISDN S/T interface
|
||||
isdnu(76), -- ISDN U interface
|
||||
lapd(77), -- Link Access Protocol D
|
||||
ipSwitch(78), -- IP Switching Objects
|
||||
rsrb(79), -- Remote Source Route Bridging
|
||||
atmLogical(80), -- ATM Logical Port
|
||||
ds0(81), -- Digital Signal Level 0
|
||||
ds0Bundle(82), -- group of ds0s on the same ds1
|
||||
bsc(83), -- Bisynchronous Protocol
|
||||
async(84), -- Asynchronous Protocol
|
||||
cnr(85), -- Combat Net Radio
|
||||
iso88025Dtr(86), -- ISO 802.5r DTR
|
||||
eplrs(87), -- Ext Pos Loc Report Sys
|
||||
arap(88), -- Appletalk Remote Access Protocol
|
||||
propCnls(89), -- Proprietary Connectionless Protocol
|
||||
hostPad(90), -- CCITT-ITU X.29 PAD Protocol
|
||||
termPad(91), -- CCITT-ITU X.3 PAD Facility
|
||||
frameRelayMPI(92), -- Multiproto Interconnect over FR
|
||||
x213(93), -- CCITT-ITU X213
|
||||
adsl(94), -- Asymmetric Digital Subscriber Loop
|
||||
radsl(95), -- Rate-Adapt. Digital Subscriber Loop
|
||||
sdsl(96), -- Symmetric Digital Subscriber Loop
|
||||
vdsl(97), -- Very H-Speed Digital Subscrib. Loop
|
||||
iso88025CRFPInt(98), -- ISO 802.5 CRFP
|
||||
myrinet(99), -- Myricom Myrinet
|
||||
voiceEM(100), -- voice recEive and transMit
|
||||
voiceFXO(101), -- voice Foreign Exchange Office
|
||||
voiceFXS(102), -- voice Foreign Exchange Station
|
||||
voiceEncap(103), -- voice encapsulation
|
||||
voiceOverIp(104), -- voice over IP encapsulation
|
||||
atmDxi(105), -- ATM DXI
|
||||
atmFuni(106), -- ATM FUNI
|
||||
atmIma (107), -- ATM IMA
|
||||
pppMultilinkBundle(108), -- PPP Multilink Bundle
|
||||
ipOverCdlc (109), -- IBM ipOverCdlc
|
||||
ipOverClaw (110), -- IBM Common Link Access to Workstn
|
||||
stackToStack (111), -- IBM stackToStack
|
||||
virtualIpAddress (112), -- IBM VIPA
|
||||
mpc (113), -- IBM multi-protocol channel support
|
||||
ipOverAtm (114), -- IBM ipOverAtm
|
||||
iso88025Fiber (115), -- ISO 802.5j Fiber Token Ring
|
||||
tdlc (116), -- IBM twinaxial data link control
|
||||
gigabitEthernet (117), -- Obsoleted via RFC3635
|
||||
-- ethernetCsmacd (6) should be used instead
|
||||
hdlc (118), -- HDLC
|
||||
lapf (119), -- LAP F
|
||||
v37 (120), -- V.37
|
||||
x25mlp (121), -- Multi-Link Protocol
|
||||
x25huntGroup (122), -- X25 Hunt Group
|
||||
trasnpHdlc (123), -- Transp HDLC
|
||||
interleave (124), -- Interleave channel
|
||||
fast (125), -- Fast channel
|
||||
ip (126), -- IP (for APPN HPR in IP networks)
|
||||
docsCableMaclayer (127), -- CATV Mac Layer
|
||||
docsCableDownstream (128), -- CATV Downstream interface
|
||||
docsCableUpstream (129), -- CATV Upstream interface
|
||||
a12MppSwitch (130), -- Avalon Parallel Processor
|
||||
tunnel (131), -- Encapsulation interface
|
||||
coffee (132), -- coffee pot
|
||||
ces (133), -- Circuit Emulation Service
|
||||
atmSubInterface (134), -- ATM Sub Interface
|
||||
l2vlan (135), -- Layer 2 Virtual LAN using 802.1Q
|
||||
l3ipvlan (136), -- Layer 3 Virtual LAN using IP
|
||||
l3ipxvlan (137), -- Layer 3 Virtual LAN using IPX
|
||||
digitalPowerline (138), -- IP over Power Lines
|
||||
mediaMailOverIp (139), -- Multimedia Mail over IP
|
||||
dtm (140), -- Dynamic syncronous Transfer Mode
|
||||
dcn (141), -- Data Communications Network
|
||||
ipForward (142), -- IP Forwarding Interface
|
||||
msdsl (143), -- Multi-rate Symmetric DSL
|
||||
ieee1394 (144), -- IEEE1394 High Performance Serial Bus
|
||||
if-gsn (145), -- HIPPI-6400
|
||||
dvbRccMacLayer (146), -- DVB-RCC MAC Layer
|
||||
dvbRccDownstream (147), -- DVB-RCC Downstream Channel
|
||||
dvbRccUpstream (148), -- DVB-RCC Upstream Channel
|
||||
atmVirtual (149), -- ATM Virtual Interface
|
||||
mplsTunnel (150), -- MPLS Tunnel Virtual Interface
|
||||
srp (151), -- Spatial Reuse Protocol
|
||||
voiceOverAtm (152), -- Voice Over ATM
|
||||
voiceOverFrameRelay (153), -- Voice Over Frame Relay
|
||||
idsl (154), -- Digital Subscriber Loop over ISDN
|
||||
compositeLink (155), -- Avici Composite Link Interface
|
||||
ss7SigLink (156), -- SS7 Signaling Link
|
||||
propWirelessP2P (157), -- Prop. P2P wireless interface
|
||||
frForward (158), -- Frame Forward Interface
|
||||
rfc1483 (159), -- Multiprotocol over ATM AAL5
|
||||
usb (160), -- USB Interface
|
||||
ieee8023adLag (161), -- IEEE 802.3ad Link Aggregate
|
||||
bgppolicyaccounting (162), -- BGP Policy Accounting
|
||||
frf16MfrBundle (163), -- FRF .16 Multilink Frame Relay
|
||||
h323Gatekeeper (164), -- H323 Gatekeeper
|
||||
h323Proxy (165), -- H323 Voice and Video Proxy
|
||||
mpls (166), -- MPLS
|
||||
mfSigLink (167), -- Multi-frequency signaling link
|
||||
hdsl2 (168), -- High Bit-Rate DSL - 2nd generation
|
||||
shdsl (169), -- Multirate HDSL2
|
||||
ds1FDL (170), -- Facility Data Link 4Kbps on a DS1
|
||||
pos (171), -- Packet over SONET/SDH Interface
|
||||
dvbAsiIn (172), -- DVB-ASI Input
|
||||
dvbAsiOut (173), -- DVB-ASI Output
|
||||
plc (174), -- Power Line Communtications
|
||||
nfas (175), -- Non Facility Associated Signaling
|
||||
tr008 (176), -- TR008
|
||||
gr303RDT (177), -- Remote Digital Terminal
|
||||
gr303IDT (178), -- Integrated Digital Terminal
|
||||
isup (179), -- ISUP
|
||||
propDocsWirelessMaclayer (180), -- Cisco proprietary Maclayer
|
||||
propDocsWirelessDownstream (181), -- Cisco proprietary Downstream
|
||||
propDocsWirelessUpstream (182), -- Cisco proprietary Upstream
|
||||
hiperlan2 (183), -- HIPERLAN Type 2 Radio Interface
|
||||
propBWAp2Mp (184), -- PropBroadbandWirelessAccesspt2multipt
|
||||
-- use of this iftype for IEEE 802.16 WMAN
|
||||
-- interfaces as per IEEE Std 802.16f is
|
||||
-- deprecated and ifType 237 should be used instead.
|
||||
sonetOverheadChannel (185), -- SONET Overhead Channel
|
||||
digitalWrapperOverheadChannel (186), -- Digital Wrapper
|
||||
aal2 (187), -- ATM adaptation layer 2
|
||||
radioMAC (188), -- MAC layer over radio links
|
||||
atmRadio (189), -- ATM over radio links
|
||||
imt (190), -- Inter Machine Trunks
|
||||
mvl (191), -- Multiple Virtual Lines DSL
|
||||
reachDSL (192), -- Long Reach DSL
|
||||
frDlciEndPt (193), -- Frame Relay DLCI End Point
|
||||
atmVciEndPt (194), -- ATM VCI End Point
|
||||
opticalChannel (195), -- Optical Channel
|
||||
opticalTransport (196), -- Optical Transport
|
||||
propAtm (197), -- Proprietary ATM
|
||||
voiceOverCable (198), -- Voice Over Cable Interface
|
||||
infiniband (199), -- Infiniband
|
||||
teLink (200), -- TE Link
|
||||
q2931 (201), -- Q.2931
|
||||
virtualTg (202), -- Virtual Trunk Group
|
||||
sipTg (203), -- SIP Trunk Group
|
||||
sipSig (204), -- SIP Signaling
|
||||
docsCableUpstreamChannel (205), -- CATV Upstream Channel
|
||||
econet (206), -- Acorn Econet
|
||||
pon155 (207), -- FSAN 155Mb Symetrical PON interface
|
||||
pon622 (208), -- FSAN622Mb Symetrical PON interface
|
||||
bridge (209), -- Transparent bridge interface
|
||||
linegroup (210), -- Interface common to multiple lines
|
||||
voiceEMFGD (211), -- voice E&M Feature Group D
|
||||
voiceFGDEANA (212), -- voice FGD Exchange Access North American
|
||||
voiceDID (213), -- voice Direct Inward Dialing
|
||||
mpegTransport (214), -- MPEG transport interface
|
||||
sixToFour (215), -- 6to4 interface (DEPRECATED)
|
||||
gtp (216), -- GTP (GPRS Tunneling Protocol)
|
||||
pdnEtherLoop1 (217), -- Paradyne EtherLoop 1
|
||||
pdnEtherLoop2 (218), -- Paradyne EtherLoop 2
|
||||
opticalChannelGroup (219), -- Optical Channel Group
|
||||
homepna (220), -- HomePNA ITU-T G.989
|
||||
gfp (221), -- Generic Framing Procedure (GFP)
|
||||
ciscoISLvlan (222), -- Layer 2 Virtual LAN using Cisco ISL
|
||||
actelisMetaLOOP (223), -- Acteleis proprietary MetaLOOP High Speed Link
|
||||
fcipLink (224), -- FCIP Link
|
||||
rpr (225), -- Resilient Packet Ring Interface Type
|
||||
qam (226), -- RF Qam Interface
|
||||
lmp (227), -- Link Management Protocol
|
||||
cblVectaStar (228), -- Cambridge Broadband Networks Limited VectaStar
|
||||
docsCableMCmtsDownstream (229), -- CATV Modular CMTS Downstream Interface
|
||||
adsl2 (230), -- Asymmetric Digital Subscriber Loop Version 2
|
||||
-- (DEPRECATED/OBSOLETED - please use adsl2plus 238 instead)
|
||||
macSecControlledIF (231), -- MACSecControlled
|
||||
macSecUncontrolledIF (232), -- MACSecUncontrolled
|
||||
aviciOpticalEther (233), -- Avici Optical Ethernet Aggregate
|
||||
atmbond (234), -- atmbond
|
||||
voiceFGDOS (235), -- voice FGD Operator Services
|
||||
mocaVersion1 (236), -- MultiMedia over Coax Alliance (MoCA) Interface
|
||||
-- as documented in information provided privately to IANA
|
||||
ieee80216WMAN (237), -- IEEE 802.16 WMAN interface
|
||||
adsl2plus (238), -- Asymmetric Digital Subscriber Loop Version 2,
|
||||
-- Version 2 Plus and all variants
|
||||
dvbRcsMacLayer (239), -- DVB-RCS MAC Layer
|
||||
dvbTdm (240), -- DVB Satellite TDM
|
||||
dvbRcsTdma (241), -- DVB-RCS TDMA
|
||||
x86Laps (242), -- LAPS based on ITU-T X.86/Y.1323
|
||||
wwanPP (243), -- 3GPP WWAN
|
||||
wwanPP2 (244) -- 3GPP2 WWAN
|
||||
}
|
||||
|
||||
IANAtunnelType ::= TEXTUAL-CONVENTION
|
||||
STATUS current
|
||||
DESCRIPTION
|
||||
"The encapsulation method used by a tunnel. The value
|
||||
direct indicates that a packet is encapsulated
|
||||
directly within a normal IP header, with no
|
||||
intermediate header, and unicast to the remote tunnel
|
||||
endpoint (e.g., an RFC 2003 IP-in-IP tunnel, or an RFC
|
||||
1933 IPv6-in-IPv4 tunnel). The value minimal indicates
|
||||
that a Minimal Forwarding Header (RFC 2004) is
|
||||
inserted between the outer header and the payload
|
||||
packet. The value UDP indicates that the payload
|
||||
packet is encapsulated within a normal UDP packet
|
||||
(e.g., RFC 1234).
|
||||
|
||||
The values sixToFour, sixOverFour, and isatap
|
||||
indicates that an IPv6 packet is encapsulated directly
|
||||
within an IPv4 header, with no intermediate header,
|
||||
and unicast to the destination determined by the 6to4,
|
||||
6over4, or ISATAP protocol.
|
||||
|
||||
The remaining protocol-specific values indicate that a
|
||||
header of the protocol of that name is inserted
|
||||
between the outer header and the payload header.
|
||||
|
||||
The assignment policy for IANAtunnelType values is
|
||||
identical to the policy for assigning IANAifType
|
||||
values."
|
||||
SYNTAX INTEGER {
|
||||
other(1), -- none of the following
|
||||
direct(2), -- no intermediate header
|
||||
gre(3), -- GRE encapsulation
|
||||
minimal(4), -- Minimal encapsulation
|
||||
l2tp(5), -- L2TP encapsulation
|
||||
pptp(6), -- PPTP encapsulation
|
||||
l2f(7), -- L2F encapsulation
|
||||
udp(8), -- UDP encapsulation
|
||||
atmp(9), -- ATMP encapsulation
|
||||
msdp(10), -- MSDP encapsulation
|
||||
sixToFour(11), -- 6to4 encapsulation
|
||||
sixOverFour(12), -- 6over4 encapsulation
|
||||
isatap(13), -- ISATAP encapsulation
|
||||
teredo(14) -- Teredo encapsulation
|
||||
}
|
||||
|
||||
END
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user