Porting PicoTCP WIP
This commit is contained in:
191
kernel/picotcp/modules/pico_dhcp_common.h
Normal file
191
kernel/picotcp/modules/pico_dhcp_common.h
Normal file
@ -0,0 +1,191 @@
|
||||
/*********************************************************************
|
||||
PicoTCP. Copyright (c) 2012-2017 Altran Intelligent Systems. Some rights reserved.
|
||||
See COPYING, LICENSE.GPLv2 and LICENSE.GPLv3 for usage.
|
||||
|
||||
.
|
||||
|
||||
*********************************************************************/
|
||||
#ifndef INCLUDE_PICO_DHCP_COMMON
|
||||
#define INCLUDE_PICO_DHCP_COMMON
|
||||
#include "pico_config.h"
|
||||
#include "pico_addressing.h"
|
||||
|
||||
#define PICO_DHCPD_PORT (short_be(67))
|
||||
#define PICO_DHCP_CLIENT_PORT (short_be(68))
|
||||
#define PICO_DHCPD_MAGIC_COOKIE (long_be(0x63825363))
|
||||
#define PICO_DHCP_HTYPE_ETH 1
|
||||
|
||||
/* Macro to get DHCP option field */
|
||||
#define DHCP_OPT(hdr, off) ((struct pico_dhcp_opt *)(((uint8_t *)hdr) + sizeof(struct pico_dhcp_hdr) + off))
|
||||
|
||||
/* flags */
|
||||
#define PICO_DHCP_FLAG_BROADCAST 0x8000
|
||||
|
||||
/* options */
|
||||
#define PICO_DHCP_OPT_PAD 0x00
|
||||
#define PICO_DHCP_OPT_NETMASK 0x01
|
||||
#define PICO_DHCP_OPT_TIME 0x02
|
||||
#define PICO_DHCP_OPT_ROUTER 0x03
|
||||
#define PICO_DHCP_OPT_DNS 0x06
|
||||
#define PICO_DHCP_OPT_HOSTNAME 0x0c
|
||||
#define PICO_DHCP_OPT_DOMAINNAME 0x0f
|
||||
#define PICO_DHCP_OPT_MTU 0x1a
|
||||
#define PICO_DHCP_OPT_BROADCAST 0x1c
|
||||
#define PICO_DHCP_OPT_NETBIOSNS 0x2c
|
||||
#define PICO_DHCP_OPT_NETBIOSSCOPE 0x2f
|
||||
#define PICO_DHCP_OPT_REQIP 0x32
|
||||
#define PICO_DHCP_OPT_LEASETIME 0x33
|
||||
#define PICO_DHCP_OPT_OPTOVERLOAD 0x34
|
||||
#define PICO_DHCP_OPT_MSGTYPE 0x35
|
||||
#define PICO_DHCP_OPT_SERVERID 0x36
|
||||
#define PICO_DHCP_OPT_PARAMLIST 0x37
|
||||
#define PICO_DHCP_OPT_MESSAGE 0x38
|
||||
#define PICO_DHCP_OPT_MAXMSGSIZE 0x39
|
||||
#define PICO_DHCP_OPT_RENEWALTIME 0x3a
|
||||
#define PICO_DHCP_OPT_REBINDINGTIME 0x3b
|
||||
#define PICO_DHCP_OPT_VENDORID 0x3c
|
||||
#define PICO_DHCP_OPT_CLIENTID 0x3d
|
||||
#define PICO_DHCP_OPT_DOMAINSEARCH 0x77
|
||||
#define PICO_DHCP_OPT_STATICROUTE 0x79
|
||||
#define PICO_DHCP_OPT_END 0xFF
|
||||
|
||||
/* options len */
|
||||
#define PICO_DHCP_OPTLEN_HDR 2 /* account for code and len field */
|
||||
#define PICO_DHCP_OPTLEN_NETMASK 6
|
||||
#define PICO_DHCP_OPTLEN_ROUTER 6
|
||||
#define PICO_DHCP_OPTLEN_DNS 6
|
||||
#define PICO_DHCP_OPTLEN_BROADCAST 6
|
||||
#define PICO_DHCP_OPTLEN_REQIP 6
|
||||
#define PICO_DHCP_OPTLEN_LEASETIME 6
|
||||
#define PICO_DHCP_OPTLEN_OPTOVERLOAD 3
|
||||
#define PICO_DHCP_OPTLEN_MSGTYPE 3
|
||||
#define PICO_DHCP_OPTLEN_SERVERID 6
|
||||
#define PICO_DHCP_OPTLEN_PARAMLIST 9 /* PicoTCP specific */
|
||||
#define PICO_DHCP_OPTLEN_MAXMSGSIZE 4
|
||||
#define PICO_DHCP_OPTLEN_RENEWALTIME 6
|
||||
#define PICO_DHCP_OPTLEN_REBINDINGTIME 6
|
||||
#define PICO_DHCP_OPTLEN_END 1
|
||||
|
||||
/* op codes */
|
||||
#define PICO_DHCP_OP_REQUEST 1
|
||||
#define PICO_DHCP_OP_REPLY 2
|
||||
|
||||
/* rfc message types */
|
||||
#define PICO_DHCP_MSG_DISCOVER 1
|
||||
#define PICO_DHCP_MSG_OFFER 2
|
||||
#define PICO_DHCP_MSG_REQUEST 3
|
||||
#define PICO_DHCP_MSG_DECLINE 4
|
||||
#define PICO_DHCP_MSG_ACK 5
|
||||
#define PICO_DHCP_MSG_NAK 6
|
||||
#define PICO_DHCP_MSG_RELEASE 7
|
||||
#define PICO_DHCP_MSG_INFORM 8
|
||||
|
||||
/* custom message types */
|
||||
#define PICO_DHCP_EVENT_T1 9
|
||||
#define PICO_DHCP_EVENT_T2 10
|
||||
#define PICO_DHCP_EVENT_LEASE 11
|
||||
#define PICO_DHCP_EVENT_RETRANSMIT 12
|
||||
#define PICO_DHCP_EVENT_NONE 0xff
|
||||
|
||||
PACKED_STRUCT_DEF pico_dhcp_hdr
|
||||
{
|
||||
uint8_t op;
|
||||
uint8_t htype;
|
||||
uint8_t hlen;
|
||||
uint8_t hops; /* zero */
|
||||
uint32_t xid; /* store this in the request */
|
||||
uint16_t secs; /* ignore */
|
||||
uint16_t flags;
|
||||
uint32_t ciaddr; /* client address - if asking for renewal */
|
||||
uint32_t yiaddr; /* your address (client) */
|
||||
uint32_t siaddr; /* dhcp offered address */
|
||||
uint32_t giaddr; /* relay agent, bootp. */
|
||||
uint8_t hwaddr[6];
|
||||
uint8_t hwaddr_padding[10];
|
||||
char hostname[64];
|
||||
char bootp_filename[128];
|
||||
uint32_t dhcp_magic;
|
||||
};
|
||||
|
||||
PACKED_STRUCT_DEF pico_dhcp_opt
|
||||
{
|
||||
uint8_t code;
|
||||
uint8_t len;
|
||||
PACKED_UNION_DEF dhcp_opt_ext_u {
|
||||
PEDANTIC_STRUCT_DEF netmask_s {
|
||||
struct pico_ip4 ip;
|
||||
} netmask;
|
||||
PEDANTIC_STRUCT_DEF router_s {
|
||||
struct pico_ip4 ip;
|
||||
} router;
|
||||
PEDANTIC_STRUCT_DEF dns_s {
|
||||
struct pico_ip4 ip;
|
||||
} dns1;
|
||||
struct dns_s dns2;
|
||||
PEDANTIC_STRUCT_DEF broadcast_s {
|
||||
struct pico_ip4 ip;
|
||||
} broadcast;
|
||||
PEDANTIC_STRUCT_DEF req_ip_s {
|
||||
struct pico_ip4 ip;
|
||||
} req_ip;
|
||||
PEDANTIC_STRUCT_DEF lease_time_s {
|
||||
uint32_t time;
|
||||
} lease_time;
|
||||
PEDANTIC_STRUCT_DEF opt_overload_s {
|
||||
uint8_t value;
|
||||
} opt_overload;
|
||||
PEDANTIC_STRUCT_DEF tftp_server_s {
|
||||
char name[1];
|
||||
} tftp_server;
|
||||
PEDANTIC_STRUCT_DEF bootfile_s {
|
||||
char name[1];
|
||||
} bootfile;
|
||||
PEDANTIC_STRUCT_DEF msg_type_s {
|
||||
uint8_t type;
|
||||
} msg_type;
|
||||
PEDANTIC_STRUCT_DEF server_id_s {
|
||||
struct pico_ip4 ip;
|
||||
} server_id;
|
||||
PEDANTIC_STRUCT_DEF param_list_s {
|
||||
uint8_t code[1];
|
||||
} param_list;
|
||||
PEDANTIC_STRUCT_DEF message_s {
|
||||
char error[1];
|
||||
} message;
|
||||
PEDANTIC_STRUCT_DEF max_msg_size_s {
|
||||
uint16_t size;
|
||||
} max_msg_size;
|
||||
PEDANTIC_STRUCT_DEF renewal_time_s {
|
||||
uint32_t time;
|
||||
} renewal_time;
|
||||
PEDANTIC_STRUCT_DEF rebinding_time_s {
|
||||
uint32_t time;
|
||||
} rebinding_time;
|
||||
PEDANTIC_STRUCT_DEF vendor_id_s {
|
||||
uint8_t id[1];
|
||||
} vendor_id;
|
||||
PEDANTIC_STRUCT_DEF client_id_s {
|
||||
uint8_t id[1];
|
||||
} client_id;
|
||||
PEDANTIC_STRUCT_DEF text_s {
|
||||
char txt[1];
|
||||
} string;
|
||||
} ext;
|
||||
};
|
||||
|
||||
uint8_t dhcp_get_next_option(uint8_t *begin, uint8_t *data, int *len, uint8_t **nextopt);
|
||||
struct pico_dhcp_opt *pico_dhcp_next_option(struct pico_dhcp_opt **ptr);
|
||||
uint8_t pico_dhcp_are_options_valid(void *ptr, int32_t len);
|
||||
|
||||
uint8_t pico_dhcp_opt_netmask(void *ptr, struct pico_ip4 *ip);
|
||||
uint8_t pico_dhcp_opt_router(void *ptr, struct pico_ip4 *ip);
|
||||
uint8_t pico_dhcp_opt_dns(void *ptr, struct pico_ip4 *ip);
|
||||
uint8_t pico_dhcp_opt_broadcast(void *ptr, struct pico_ip4 *ip);
|
||||
uint8_t pico_dhcp_opt_reqip(void *ptr, struct pico_ip4 *ip);
|
||||
uint8_t pico_dhcp_opt_leasetime(void *ptr, uint32_t time);
|
||||
uint8_t pico_dhcp_opt_msgtype(void *ptr, uint8_t type);
|
||||
uint8_t pico_dhcp_opt_serverid(void *ptr, struct pico_ip4 *ip);
|
||||
uint8_t pico_dhcp_opt_paramlist(void *ptr);
|
||||
uint8_t pico_dhcp_opt_maxmsgsize(void *ptr, uint16_t size);
|
||||
uint8_t pico_dhcp_opt_end(void *ptr);
|
||||
#endif
|
||||
Reference in New Issue
Block a user