Fork of Smoothie to port to mbed non-LPC targets.
Fork of Smoothie by
libs/Network/net_util.h@2:1df0b61d3b5a, 2014-02-28 (annotated)
- 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?
User | Revision | Line number | New 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 */ |