Fork of Smoothie to port to mbed non-LPC targets.

Dependencies:   mbed

Fork of Smoothie by Stéphane Cachat

Committer:
Michael J. Spencer
Date:
Fri Feb 28 18:52:52 2014 -0800
Revision:
2:1df0b61d3b5a
Update to latest Smoothie.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Michael J. Spencer 2:1df0b61d3b5a 1 #ifndef _NET_UTIL_H
Michael J. Spencer 2:1df0b61d3b5a 2 #define _NET_UTIL_H
Michael J. Spencer 2:1df0b61d3b5a 3
Michael J. Spencer 2:1df0b61d3b5a 4 #include <cstdint>
Michael J. Spencer 2:1df0b61d3b5a 5 #include <cstdlib>
Michael J. Spencer 2:1df0b61d3b5a 6 #include <cstdio>
Michael J. Spencer 2:1df0b61d3b5a 7 #include <cstring>
Michael J. Spencer 2:1df0b61d3b5a 8
Michael J. Spencer 2:1df0b61d3b5a 9 #define HARDWARE_TYPE_ETHERNET 1
Michael J. Spencer 2:1df0b61d3b5a 10
Michael J. Spencer 2:1df0b61d3b5a 11 #define SIZEOF_MAC 6
Michael J. Spencer 2:1df0b61d3b5a 12 #define SIZEOF_IP 4
Michael J. Spencer 2:1df0b61d3b5a 13
Michael J. Spencer 2:1df0b61d3b5a 14 #define MAC_STR_LEN 18
Michael J. Spencer 2:1df0b61d3b5a 15 #define IP_STR_LEN 16
Michael J. Spencer 2:1df0b61d3b5a 16
Michael J. Spencer 2:1df0b61d3b5a 17 // uint16_t htons(uint16_t v);
Michael J. Spencer 2:1df0b61d3b5a 18 #define htons(a) ((((a) >> 8) & 0xFF) | (((a) << 8) & 0xFF00))
Michael J. Spencer 2:1df0b61d3b5a 19 #define ntohs(a) htons(a)
Michael J. Spencer 2:1df0b61d3b5a 20
Michael J. Spencer 2:1df0b61d3b5a 21 // uint32_t htonl(uint32_t v);
Michael J. Spencer 2:1df0b61d3b5a 22 #define htonl(a) ((((a) >> 24) & 0x000000FF) | (((a) >> 8) & 0x0000FF00) | (((a) << 8) & 0x00FF0000) | (((a) << 24) & 0xFF000000))
Michael J. Spencer 2:1df0b61d3b5a 23 #define ntohl(a) htonl(a)
Michael J. Spencer 2:1df0b61d3b5a 24
Michael J. Spencer 2:1df0b61d3b5a 25 #define compare_ip(ip1, ip2, mask) (((ip1) & (mask)) == ((ip2) & (mask)))
Michael J. Spencer 2:1df0b61d3b5a 26
Michael J. Spencer 2:1df0b61d3b5a 27 #define IPA(a, b, c, d) (((a) << 24) | ((b) << 16) | ((c) << 8) | (d))
Michael J. Spencer 2:1df0b61d3b5a 28
Michael J. Spencer 2:1df0b61d3b5a 29 typedef uint32_t IP_ADDR;
Michael J. Spencer 2:1df0b61d3b5a 30 typedef uint32_t* NET_PACKET;
Michael J. Spencer 2:1df0b61d3b5a 31 typedef uint8_t* NET_PAYLOAD;
Michael J. Spencer 2:1df0b61d3b5a 32
Michael J. Spencer 2:1df0b61d3b5a 33 // class netcore;
Michael J. Spencer 2:1df0b61d3b5a 34 class Encapsulated;
Michael J. Spencer 2:1df0b61d3b5a 35 class Encapsulator;
Michael J. Spencer 2:1df0b61d3b5a 36 class NetworkInterface;
Michael J. Spencer 2:1df0b61d3b5a 37
Michael J. Spencer 2:1df0b61d3b5a 38 class Encapsulated
Michael J. Spencer 2:1df0b61d3b5a 39 {
Michael J. Spencer 2:1df0b61d3b5a 40 public:
Michael J. Spencer 2:1df0b61d3b5a 41 virtual int receive(NetworkInterface*, NET_PACKET, int) = 0;
Michael J. Spencer 2:1df0b61d3b5a 42 virtual int construct(NetworkInterface*, NET_PACKET, int) = 0;
Michael J. Spencer 2:1df0b61d3b5a 43 };
Michael J. Spencer 2:1df0b61d3b5a 44
Michael J. Spencer 2:1df0b61d3b5a 45 class Encapsulator : public Encapsulated
Michael J. Spencer 2:1df0b61d3b5a 46 {
Michael J. Spencer 2:1df0b61d3b5a 47 public:
Michael J. Spencer 2:1df0b61d3b5a 48 virtual NET_PACKET get_new_packet_buffer(NetworkInterface*) = 0;
Michael J. Spencer 2:1df0b61d3b5a 49 virtual NET_PAYLOAD get_payload_buffer(NET_PACKET) = 0;
Michael J. Spencer 2:1df0b61d3b5a 50 virtual void set_payload_length(NET_PACKET, int) = 0;
Michael J. Spencer 2:1df0b61d3b5a 51 };
Michael J. Spencer 2:1df0b61d3b5a 52
Michael J. Spencer 2:1df0b61d3b5a 53 class Period_receiver
Michael J. Spencer 2:1df0b61d3b5a 54 {
Michael J. Spencer 2:1df0b61d3b5a 55 public:
Michael J. Spencer 2:1df0b61d3b5a 56 virtual int periodical(int, NetworkInterface*, NET_PACKET, int) = 0;
Michael J. Spencer 2:1df0b61d3b5a 57 };
Michael J. Spencer 2:1df0b61d3b5a 58
Michael J. Spencer 2:1df0b61d3b5a 59 class NetworkInterface : public Encapsulator {
Michael J. Spencer 2:1df0b61d3b5a 60 public:
Michael J. Spencer 2:1df0b61d3b5a 61 virtual const uint8_t* get_name(void) { return interface_name; };
Michael J. Spencer 2:1df0b61d3b5a 62 // virtual void provide_net(netcore* n){ net = n; }
Michael J. Spencer 2:1df0b61d3b5a 63
Michael J. Spencer 2:1df0b61d3b5a 64 // virtual bool if_up(void) = 0;
Michael J. Spencer 2:1df0b61d3b5a 65
Michael J. Spencer 2:1df0b61d3b5a 66 virtual bool can_read_packet(void) = 0;
Michael J. Spencer 2:1df0b61d3b5a 67 virtual int read_packet(uint8_t**) = 0;
Michael J. Spencer 2:1df0b61d3b5a 68 void release_read_packet(uint8_t*);
Michael J. Spencer 2:1df0b61d3b5a 69
Michael J. Spencer 2:1df0b61d3b5a 70 virtual bool can_write_packet(void) = 0;
Michael J. Spencer 2:1df0b61d3b5a 71 virtual int write_packet(uint8_t *, int) = 0;
Michael J. Spencer 2:1df0b61d3b5a 72
Michael J. Spencer 2:1df0b61d3b5a 73 virtual void* request_packet_buffer(void) = 0;
Michael J. Spencer 2:1df0b61d3b5a 74
Michael J. Spencer 2:1df0b61d3b5a 75 virtual void set_ip(uint32_t new_ip) { ip_address = new_ip; };
Michael J. Spencer 2:1df0b61d3b5a 76 virtual void set_mac(uint8_t new_mac[6]) { memcpy(mac_address, new_mac, 6); };
Michael J. Spencer 2:1df0b61d3b5a 77
Michael J. Spencer 2:1df0b61d3b5a 78 bool isUp() { return up; }
Michael J. Spencer 2:1df0b61d3b5a 79
Michael J. Spencer 2:1df0b61d3b5a 80 // netcore* net;
Michael J. Spencer 2:1df0b61d3b5a 81 uint8_t* interface_name;
Michael J. Spencer 2:1df0b61d3b5a 82
Michael J. Spencer 2:1df0b61d3b5a 83 IP_ADDR ip_address;
Michael J. Spencer 2:1df0b61d3b5a 84 IP_ADDR ip_mask;
Michael J. Spencer 2:1df0b61d3b5a 85
Michael J. Spencer 2:1df0b61d3b5a 86 uint8_t mac_address[6];
Michael J. Spencer 2:1df0b61d3b5a 87
Michael J. Spencer 2:1df0b61d3b5a 88 bool up;
Michael J. Spencer 2:1df0b61d3b5a 89 };
Michael J. Spencer 2:1df0b61d3b5a 90
Michael J. Spencer 2:1df0b61d3b5a 91 extern const uint8_t broadcast[6];
Michael J. Spencer 2:1df0b61d3b5a 92
Michael J. Spencer 2:1df0b61d3b5a 93 bool compare_mac(const uint8_t*, const uint8_t*, const uint8_t*);
Michael J. Spencer 2:1df0b61d3b5a 94 int format_mac(uint8_t*, uint8_t*);
Michael J. Spencer 2:1df0b61d3b5a 95 int format_ip(uint32_t, uint8_t*);
Michael J. Spencer 2:1df0b61d3b5a 96 int checksum16(uint8_t*, int, int);
Michael J. Spencer 2:1df0b61d3b5a 97 uint32_t crc32(uint8_t* buf, int length);
Michael J. Spencer 2:1df0b61d3b5a 98
Michael J. Spencer 2:1df0b61d3b5a 99 #endif /* _NET_UTIL_H */