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
net.c
00001 #include <stdint.h> 00002 #include <stdbool.h> 00003 00004 #include "link.h" 00005 #include "net.h" 00006 #include "tcp.h" 00007 #include "dhcp.h" 00008 #include "ar4.h" 00009 #include "ar6.h" 00010 #include "nr.h" 00011 #include "dns.h" 00012 #include "slaac.h" 00013 #include "ndp.h" 00014 #include "ntp.h" 00015 00016 #include "tftp.h" 00017 #include "led.h" 00018 #include "restart.h" 00019 00020 bool NetTraceStack = false; 00021 bool NetTraceNewLine = false; 00022 bool NetTraceVerbose = false; 00023 00024 static bool hostMatched = false; 00025 bool NetTraceHostGetMatched() 00026 { 00027 return hostMatched; 00028 } 00029 void NetTraceHostResetMatched() 00030 { 00031 hostMatched = false; 00032 } 00033 char NetTraceHost[2]; 00034 void NetTraceHostCheckIp6(char* ip) 00035 { 00036 if (!ip[0]) return; 00037 if (NetTraceHost[0] != ip[14]) return; 00038 if (NetTraceHost[1] != ip[15]) return; 00039 hostMatched = true; 00040 } 00041 void NetTraceHostCheckMac(char* mac) 00042 { 00043 if (NetTraceHost[0] != mac[4]) return; 00044 if (NetTraceHost[1] != mac[5]) return; 00045 hostMatched = true; 00046 } 00047 int16_t NetToHost16(int16_t n) 00048 { 00049 int16_t h; 00050 00051 char* pn = (char*)&n; 00052 char* ph = (char*)&h + 1; 00053 00054 *ph = *pn; ph--; pn++; // 1<-0 00055 *ph = *pn; // 0<-1 00056 00057 return h; 00058 } 00059 int32_t NetToHost32(int32_t n) 00060 { 00061 int32_t h; 00062 00063 char* pn = (char*)&n; 00064 char* ph = (char*)&h + 3; 00065 00066 *ph = *pn; ph--; pn++; // 3<-0 00067 *ph = *pn; ph--; pn++; // 2<-1 00068 *ph = *pn; ph--; pn++; // 1<-2 00069 *ph = *pn; // 0<-3 00070 00071 return h; 00072 } 00073 int64_t NetToHost64(int64_t n) 00074 { 00075 int64_t h; 00076 00077 char* pn = (char*)&n; 00078 char* ph = (char*)&h + 7; 00079 00080 *ph = *pn; ph--; pn++; // 7<-0 00081 *ph = *pn; ph--; pn++; // 6<-1 00082 *ph = *pn; ph--; pn++; // 5<-2 00083 *ph = *pn; ph--; pn++; // 4<-3 00084 *ph = *pn; ph--; pn++; // 3<-4 00085 *ph = *pn; ph--; pn++; // 2<-5 00086 *ph = *pn; ph--; pn++; // 1<-6 00087 *ph = *pn; // 0<-7 00088 00089 return h; 00090 } 00091 void NetInvert16(void* h, void* n) 00092 { 00093 char* pn = (char*)n; 00094 char* ph = (char*)h + 1; 00095 00096 *ph = *pn; ph--; pn++; // 1<-0 00097 *ph = *pn; // 0<-1 00098 } 00099 void NetInvert32(void* h, void* n) 00100 { 00101 char* pn = (char*)n; 00102 char* ph = (char*)h + 3; 00103 00104 *ph = *pn; ph--; pn++; // 3<-0 00105 *ph = *pn; ph--; pn++; // 2<-1 00106 *ph = *pn; ph--; pn++; // 1<-2 00107 *ph = *pn; // 0<-3 00108 } 00109 void NetInvert64(void* h, void* n) 00110 { 00111 char* pn = (char*)n; 00112 char* ph = (char*)h + 7; 00113 00114 *ph = *pn; ph--; pn++; // 7<-0 00115 *ph = *pn; ph--; pn++; // 6<-1 00116 *ph = *pn; ph--; pn++; // 5<-2 00117 *ph = *pn; ph--; pn++; // 4<-3 00118 *ph = *pn; ph--; pn++; // 3<-4 00119 *ph = *pn; ph--; pn++; // 2<-5 00120 *ph = *pn; ph--; pn++; // 1<-6 00121 *ph = *pn; // 0<-7 00122 } 00123 00124 void NetDirect16(void* h, void* n) 00125 { 00126 char* pn = (char*)n; 00127 char* ph = (char*)h; 00128 00129 *ph = *pn; ph++; pn++; // 0<-0 00130 *ph = *pn; // 1<-1 00131 } 00132 void NetDirect32(void* h, void* n) 00133 { 00134 char* pn = (char*)n; 00135 char* ph = (char*)h; 00136 00137 *ph = *pn; ph++; pn++; // 0<-0 00138 *ph = *pn; ph++; pn++; // 1<-1 00139 *ph = *pn; ph++; pn++; // 2<-2 00140 *ph = *pn; // 3<-3 00141 } 00142 void NetDirect64(void* h, void* n) 00143 { 00144 char* pn = (char*)n; 00145 char* ph = (char*)h; 00146 00147 *ph = *pn; ph++; pn++; // 0<-0 00148 *ph = *pn; ph++; pn++; // 1<-1 00149 *ph = *pn; ph++; pn++; // 2<-2 00150 *ph = *pn; ph++; pn++; // 3<-3 00151 *ph = *pn; ph++; pn++; // 4<-4 00152 *ph = *pn; ph++; pn++; // 5<-5 00153 *ph = *pn; ph++; pn++; // 6<-6 00154 *ph = *pn; // 7<-7 00155 } 00156 void NetInit() 00157 { 00158 LinkInit(); 00159 TcpInit(); 00160 Ar4Init(); 00161 Ar6Init(); 00162 NrInit(); 00163 SlaacInit(); 00164 NtpInit(); 00165 } 00166 void NetMain() 00167 { 00168 int lastRestartPoint = RestartPoint; 00169 RestartPoint = FAULT_POINT_NetMain; 00170 LinkMain(); 00171 TcpMain(); 00172 Ar4Main(); 00173 Ar6Main(); 00174 NrMain(); 00175 DnsMain(); 00176 RestartPoint = lastRestartPoint; 00177 }
Generated on Tue Jul 12 2022 18:53:40 by 1.7.2