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

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers net.c Source File

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 }