RealtimeCompLab2
Dependencies: mbed
Fork of PPP-Blinky by
PPP-Blinky/ppp-blinky.h
- Committer:
- nixnax
- Date:
- 2017-09-04
- Revision:
- 170:3d3b2126181c
- Parent:
- 167:ff8a2d8beeb1
- Child:
- 173:6774a0c851c4
File content as of revision 170:3d3b2126181c:
/// ppp-blinky.h #include "mbed.h" #include "sha1.h" #include "BufferedSerial.h" void initializePpp(); int connectedPpp(); void waitForPcConnectString(); void waitForPppFrame(); void determinePacketType(); /// PPP header typedef struct { // [ff 03 00 21] unsigned int address : 8; // always 0xff unsigned int control : 8; // always 03 unsigned int protocolR : 16; // byte reversed, 0x0021 for ip } pppHeaderType; /// LCP and IPCP header typedef struct { // ppp part unsigned int address : 8; // always 0xff unsigned int control : 8; // always 03 unsigned int protocolR : 16; // byte reversed, 0x0021 for ip // ipcp and lcp part unsigned int code : 8; // IPCP and LCP contain a code field which identifies the requested action or response unsigned int identifier : 8 ; unsigned int lengthR : 16; } ipcpHeaderType; /// IP header typedef struct { unsigned int headerLength : 4; // ip headerlength / 4 unsigned int version : 4; // ip version number unsigned int ect : 1; // ecn capable transport unsigned int ce : 1; // ecn-ce unsigned int dscp : 6; // differentiated services unsigned int lengthR : 16; // ip packet length (byte-reversed) unsigned int identR : 16; // ident, byte reversed unsigned int fragmentOffsHi : 5; unsigned int lastFragment : 1; unsigned int dontFragment : 1; unsigned int reservedIP : 1; unsigned int fragmentOffsLo : 8; unsigned int ttl : 8; unsigned int protocol : 8; // next protocol unsigned int checksumR : 16; // ip checksum, byte reversed union { unsigned int srcAdrR; // source IP address char srcAdrPtr [0]; // so we also have a char * to srcAdrR }; union { unsigned int dstAdrR; // destination IP address char dstAdrPtr [0]; // so we also have a char * to dstAdrR }; } ipHeaderType; /// IP pseudoheader. Used in TCP/UDP checksum calculations. typedef struct { union { char start [0]; // a char * to avoid type conversions unsigned int srcAdrR; // source IP address }; unsigned int dstAdrR; // destination IP address unsigned int zero : 8; unsigned int protocol : 8; unsigned int lengthR : 16; // byte reversed } pseudoIpHeaderType; /// TCP header typedef struct { unsigned int srcPortR : 16; // byte reversed unsigned int dstPortR : 16; // byte reversed unsigned int seqTcpR; // byte reversed unsigned int ackTcpR; // byte reversed unsigned int resvd1 : 4; // reserved unsigned int offset : 4; // tcp header length [5..15] union { unsigned char All; // all 8 flag bits struct { // individual flag bits unsigned char fin: 1, // fin syn : 1, // syn rst : 1, // rst psh : 1, // psh ack : 1, // ack urg : 1, // urg ece : 1, // ece cwr : 1; // cwr }; } flag; unsigned int windowR : 16; // byte reversed unsigned int checksumR : 16; // byte reversed unsigned int urgentPointerR : 16; // byte reversed; unsigned int tcpOptions[10]; // up to 10 words of options possible } tcpHeaderType; /// UDP header. typedef struct { unsigned int srcPortR : 16; // byte reversed unsigned int dstPortR : 16; // byte reversed unsigned int lengthR : 16; // byte reversed unsigned int checksumR : 16; // byte reversed char data [0]; // data area } udpHeaderType; /// ICMP header. typedef struct { unsigned int type : 8; unsigned int code : 8; unsigned int checkSumR : 16; // byte reversed unsigned int idR : 16; // byte reversed unsigned int sequenceR : 16; // byte reversed char data [0]; // data area } icmpHeaderType;