A stack which works with or without an Mbed os library. Provides IPv4 or IPv6 with a full 1500 byte buffer.

Dependents:   oldheating gps motorhome heating

Committer:
andrewboyson
Date:
Mon May 01 18:20:55 2017 +0000
Revision:
13:9cd54f7db57a
Child:
14:e75a59c1123d
Added ability to read DNS queries with encoded IP addresses

Who changed what in which revision?

UserRevisionLine numberNew contents of line
andrewboyson 13:9cd54f7db57a 1 #include "mbed.h"
andrewboyson 13:9cd54f7db57a 2 #include "eth.h"
andrewboyson 13:9cd54f7db57a 3
andrewboyson 13:9cd54f7db57a 4 char MacLocal[6];
andrewboyson 13:9cd54f7db57a 5
andrewboyson 13:9cd54f7db57a 6 bool MacCompareBroadcast(char* p)
andrewboyson 13:9cd54f7db57a 7 {
andrewboyson 13:9cd54f7db57a 8 if (*p++ != 0xff) return false;
andrewboyson 13:9cd54f7db57a 9 if (*p++ != 0xff) return false;
andrewboyson 13:9cd54f7db57a 10 if (*p++ != 0xff) return false;
andrewboyson 13:9cd54f7db57a 11 if (*p++ != 0xff) return false;
andrewboyson 13:9cd54f7db57a 12 if (*p++ != 0xff) return false;
andrewboyson 13:9cd54f7db57a 13 if (*p != 0xff) return false;
andrewboyson 13:9cd54f7db57a 14 return true;
andrewboyson 13:9cd54f7db57a 15 }
andrewboyson 13:9cd54f7db57a 16 bool MacCompareUnicastLocal(char* p)
andrewboyson 13:9cd54f7db57a 17 {
andrewboyson 13:9cd54f7db57a 18 return memcmp(p, MacLocal, 6) == 0;
andrewboyson 13:9cd54f7db57a 19 }
andrewboyson 13:9cd54f7db57a 20 bool MacCompareMulticastLocal4(char* p)
andrewboyson 13:9cd54f7db57a 21 {
andrewboyson 13:9cd54f7db57a 22 if (*p++ != 0x01) return false;
andrewboyson 13:9cd54f7db57a 23 if (*p++ != 0x00) return false;
andrewboyson 13:9cd54f7db57a 24 if (*p++ != 0x5e) return false;
andrewboyson 13:9cd54f7db57a 25 char* q = MacLocal + 3;
andrewboyson 13:9cd54f7db57a 26 if (*p++ != *q++) return false;
andrewboyson 13:9cd54f7db57a 27 if (*p++ != *q++) return false;
andrewboyson 13:9cd54f7db57a 28 if (*p != *q ) return false;
andrewboyson 13:9cd54f7db57a 29 return true;
andrewboyson 13:9cd54f7db57a 30 }
andrewboyson 13:9cd54f7db57a 31 bool MacCompareMulticastLocal6(char* p)
andrewboyson 13:9cd54f7db57a 32 {
andrewboyson 13:9cd54f7db57a 33 if (*p++ != 0x33) return false;
andrewboyson 13:9cd54f7db57a 34 if (*p++ != 0x33) return false;
andrewboyson 13:9cd54f7db57a 35 if (*p++ != 0xff) return false;
andrewboyson 13:9cd54f7db57a 36 char* q = MacLocal + 3;
andrewboyson 13:9cd54f7db57a 37 if (*p++ != *q++) return false;
andrewboyson 13:9cd54f7db57a 38 if (*p++ != *q++) return false;
andrewboyson 13:9cd54f7db57a 39 if (*p != *q ) return false;
andrewboyson 13:9cd54f7db57a 40 return true;
andrewboyson 13:9cd54f7db57a 41 }
andrewboyson 13:9cd54f7db57a 42 bool MacCompareMulticastAllNodes4(char* p)
andrewboyson 13:9cd54f7db57a 43 {
andrewboyson 13:9cd54f7db57a 44 if (*p++ != 0x01) return false;
andrewboyson 13:9cd54f7db57a 45 if (*p++ != 0x00) return false;
andrewboyson 13:9cd54f7db57a 46 if (*p++ != 0x5e) return false;
andrewboyson 13:9cd54f7db57a 47 if (*p++ != 0x00) return false;
andrewboyson 13:9cd54f7db57a 48 if (*p++ != 0x00) return false;
andrewboyson 13:9cd54f7db57a 49 if (*p != 0x01) return false;
andrewboyson 13:9cd54f7db57a 50 return true;
andrewboyson 13:9cd54f7db57a 51 }
andrewboyson 13:9cd54f7db57a 52 bool MacCompareMulticastAllNodes6(char* p)
andrewboyson 13:9cd54f7db57a 53 {
andrewboyson 13:9cd54f7db57a 54 if (*p++ != 0x33) return false;
andrewboyson 13:9cd54f7db57a 55 if (*p++ != 0x33) return false;
andrewboyson 13:9cd54f7db57a 56 if (*p++ != 0x00) return false;
andrewboyson 13:9cd54f7db57a 57 if (*p++ != 0x00) return false;
andrewboyson 13:9cd54f7db57a 58 if (*p++ != 0x00) return false;
andrewboyson 13:9cd54f7db57a 59 if (*p != 0x01) return false;
andrewboyson 13:9cd54f7db57a 60 return true;
andrewboyson 13:9cd54f7db57a 61 }
andrewboyson 13:9cd54f7db57a 62 bool MacCompareMulticastAllRouters4(char* p)
andrewboyson 13:9cd54f7db57a 63 {
andrewboyson 13:9cd54f7db57a 64 if (*p++ != 0x01) return false;
andrewboyson 13:9cd54f7db57a 65 if (*p++ != 0x00) return false;
andrewboyson 13:9cd54f7db57a 66 if (*p++ != 0x5e) return false;
andrewboyson 13:9cd54f7db57a 67 if (*p++ != 0x00) return false;
andrewboyson 13:9cd54f7db57a 68 if (*p++ != 0x00) return false;
andrewboyson 13:9cd54f7db57a 69 if (*p != 0x02) return false;
andrewboyson 13:9cd54f7db57a 70 return true;
andrewboyson 13:9cd54f7db57a 71 }
andrewboyson 13:9cd54f7db57a 72 bool MacCompareMulticastAllRouters6(char* p)
andrewboyson 13:9cd54f7db57a 73 {
andrewboyson 13:9cd54f7db57a 74 if (*p++ != 0x33) return false;
andrewboyson 13:9cd54f7db57a 75 if (*p++ != 0x33) return false;
andrewboyson 13:9cd54f7db57a 76 if (*p++ != 0x00) return false;
andrewboyson 13:9cd54f7db57a 77 if (*p++ != 0x00) return false;
andrewboyson 13:9cd54f7db57a 78 if (*p++ != 0x00) return false;
andrewboyson 13:9cd54f7db57a 79 if (*p != 0x02) return false;
andrewboyson 13:9cd54f7db57a 80 return true;
andrewboyson 13:9cd54f7db57a 81 }
andrewboyson 13:9cd54f7db57a 82 bool MacCompareMulticastMdns4(char* p)
andrewboyson 13:9cd54f7db57a 83 {
andrewboyson 13:9cd54f7db57a 84 if (*p++ != 0x01) return false;
andrewboyson 13:9cd54f7db57a 85 if (*p++ != 0x00) return false;
andrewboyson 13:9cd54f7db57a 86 if (*p++ != 0x5e) return false;
andrewboyson 13:9cd54f7db57a 87 if (*p++ != 0x00) return false;
andrewboyson 13:9cd54f7db57a 88 if (*p++ != 0x00) return false;
andrewboyson 13:9cd54f7db57a 89 if (*p != 0xfb) return false;
andrewboyson 13:9cd54f7db57a 90 return true;
andrewboyson 13:9cd54f7db57a 91 }
andrewboyson 13:9cd54f7db57a 92 bool MacCompareMulticastMdns6(char* p)
andrewboyson 13:9cd54f7db57a 93 {
andrewboyson 13:9cd54f7db57a 94 if (*p++ != 0x33) return false;
andrewboyson 13:9cd54f7db57a 95 if (*p++ != 0x33) return false;
andrewboyson 13:9cd54f7db57a 96 if (*p++ != 0x00) return false;
andrewboyson 13:9cd54f7db57a 97 if (*p++ != 0x00) return false;
andrewboyson 13:9cd54f7db57a 98 if (*p++ != 0x00) return false;
andrewboyson 13:9cd54f7db57a 99 if (*p != 0xfb) return false;
andrewboyson 13:9cd54f7db57a 100 return true;
andrewboyson 13:9cd54f7db57a 101 }
andrewboyson 13:9cd54f7db57a 102 bool MacCompareMulticastLlmnr4(char* p)
andrewboyson 13:9cd54f7db57a 103 {
andrewboyson 13:9cd54f7db57a 104 if (*p++ != 0x01) return false;
andrewboyson 13:9cd54f7db57a 105 if (*p++ != 0x00) return false;
andrewboyson 13:9cd54f7db57a 106 if (*p++ != 0x5e) return false;
andrewboyson 13:9cd54f7db57a 107 if (*p++ != 0x01) return false;
andrewboyson 13:9cd54f7db57a 108 if (*p++ != 0x00) return false;
andrewboyson 13:9cd54f7db57a 109 if (*p != 0x03) return false;
andrewboyson 13:9cd54f7db57a 110 return true;
andrewboyson 13:9cd54f7db57a 111 }
andrewboyson 13:9cd54f7db57a 112 bool MacCompareMulticastLlmnr6(char* p)
andrewboyson 13:9cd54f7db57a 113 {
andrewboyson 13:9cd54f7db57a 114 if (*p++ != 0x33) return false;
andrewboyson 13:9cd54f7db57a 115 if (*p++ != 0x33) return false;
andrewboyson 13:9cd54f7db57a 116 if (*p++ != 0x00) return false;
andrewboyson 13:9cd54f7db57a 117 if (*p++ != 0x00) return false;
andrewboyson 13:9cd54f7db57a 118 if (*p++ != 0x00) return false;
andrewboyson 13:9cd54f7db57a 119 if (*p != 0xfc) return false;
andrewboyson 13:9cd54f7db57a 120 return true;
andrewboyson 13:9cd54f7db57a 121 }
andrewboyson 13:9cd54f7db57a 122 void MacMakeMulticastNode4(char* p)
andrewboyson 13:9cd54f7db57a 123 {
andrewboyson 13:9cd54f7db57a 124 *p++ = 0x01;
andrewboyson 13:9cd54f7db57a 125 *p++ = 0x00;
andrewboyson 13:9cd54f7db57a 126 *p++ = 0x5e;
andrewboyson 13:9cd54f7db57a 127 *p++ = 0x00;
andrewboyson 13:9cd54f7db57a 128 *p++ = 0x00;
andrewboyson 13:9cd54f7db57a 129 *p = 0x01;
andrewboyson 13:9cd54f7db57a 130 }
andrewboyson 13:9cd54f7db57a 131 void MacMakeMulticastNode6(char* p)
andrewboyson 13:9cd54f7db57a 132 {
andrewboyson 13:9cd54f7db57a 133 *p++ = 0x33;
andrewboyson 13:9cd54f7db57a 134 *p++ = 0x33;
andrewboyson 13:9cd54f7db57a 135 *p++ = 0x00;
andrewboyson 13:9cd54f7db57a 136 *p++ = 0x00;
andrewboyson 13:9cd54f7db57a 137 *p++ = 0x00;
andrewboyson 13:9cd54f7db57a 138 *p = 0x01;
andrewboyson 13:9cd54f7db57a 139 }
andrewboyson 13:9cd54f7db57a 140 void MacMakeMulticastRouter4(char* p)
andrewboyson 13:9cd54f7db57a 141 {
andrewboyson 13:9cd54f7db57a 142 *p++ = 0x01;
andrewboyson 13:9cd54f7db57a 143 *p++ = 0x00;
andrewboyson 13:9cd54f7db57a 144 *p++ = 0x5e;
andrewboyson 13:9cd54f7db57a 145 *p++ = 0x00;
andrewboyson 13:9cd54f7db57a 146 *p++ = 0x00;
andrewboyson 13:9cd54f7db57a 147 *p = 0x02;
andrewboyson 13:9cd54f7db57a 148 }
andrewboyson 13:9cd54f7db57a 149 void MacMakeMulticastRouter6(char* p)
andrewboyson 13:9cd54f7db57a 150 {
andrewboyson 13:9cd54f7db57a 151 *p++ = 0x33;
andrewboyson 13:9cd54f7db57a 152 *p++ = 0x33;
andrewboyson 13:9cd54f7db57a 153 *p++ = 0x00;
andrewboyson 13:9cd54f7db57a 154 *p++ = 0x00;
andrewboyson 13:9cd54f7db57a 155 *p++ = 0x00;
andrewboyson 13:9cd54f7db57a 156 *p = 0x02;
andrewboyson 13:9cd54f7db57a 157 }
andrewboyson 13:9cd54f7db57a 158 void MacMakeMulticastMdns4(char* p)
andrewboyson 13:9cd54f7db57a 159 {
andrewboyson 13:9cd54f7db57a 160 *p++ = 0x01;
andrewboyson 13:9cd54f7db57a 161 *p++ = 0x00;
andrewboyson 13:9cd54f7db57a 162 *p++ = 0x5e;
andrewboyson 13:9cd54f7db57a 163 *p++ = 0x00;
andrewboyson 13:9cd54f7db57a 164 *p++ = 0x00;
andrewboyson 13:9cd54f7db57a 165 *p = 0xfb;
andrewboyson 13:9cd54f7db57a 166 }
andrewboyson 13:9cd54f7db57a 167 void MacMakeMulticastMdns6(char* p)
andrewboyson 13:9cd54f7db57a 168 {
andrewboyson 13:9cd54f7db57a 169 *p++ = 0x33;
andrewboyson 13:9cd54f7db57a 170 *p++ = 0x33;
andrewboyson 13:9cd54f7db57a 171 *p++ = 0x00;
andrewboyson 13:9cd54f7db57a 172 *p++ = 0x00;
andrewboyson 13:9cd54f7db57a 173 *p++ = 0x00;
andrewboyson 13:9cd54f7db57a 174 *p = 0xfb;
andrewboyson 13:9cd54f7db57a 175 }
andrewboyson 13:9cd54f7db57a 176 void MacMakeMulticastLlmnr4(char* p)
andrewboyson 13:9cd54f7db57a 177 {
andrewboyson 13:9cd54f7db57a 178 *p++ = 0x01;
andrewboyson 13:9cd54f7db57a 179 *p++ = 0x00;
andrewboyson 13:9cd54f7db57a 180 *p++ = 0x5e;
andrewboyson 13:9cd54f7db57a 181 *p++ = 0x00;
andrewboyson 13:9cd54f7db57a 182 *p++ = 0x00;
andrewboyson 13:9cd54f7db57a 183 *p = 0xfc;
andrewboyson 13:9cd54f7db57a 184 }
andrewboyson 13:9cd54f7db57a 185 void MacMakeMulticastLlmnr6(char* p)
andrewboyson 13:9cd54f7db57a 186 {
andrewboyson 13:9cd54f7db57a 187 *p++ = 0x33;
andrewboyson 13:9cd54f7db57a 188 *p++ = 0x33;
andrewboyson 13:9cd54f7db57a 189 *p++ = 0x00;
andrewboyson 13:9cd54f7db57a 190 *p++ = 0x01;
andrewboyson 13:9cd54f7db57a 191 *p++ = 0x00;
andrewboyson 13:9cd54f7db57a 192 *p = 0x03;
andrewboyson 13:9cd54f7db57a 193 }
andrewboyson 13:9cd54f7db57a 194 void MacMakeBroadcast(char* p)
andrewboyson 13:9cd54f7db57a 195 {
andrewboyson 13:9cd54f7db57a 196 memset(p, 0xFF, 6);
andrewboyson 13:9cd54f7db57a 197 }