Docker-Build mit gcc-arm-none-eabi 4.9-2014q4 (statt Homebrew-Cask) verwendet, Dockerfile/tools/docker.sh dafür aus Task 13 vorgezogen. cmake/sdk.cmake schont gcc 4.9 (kennt -fcommon/-Wno-error=... nicht). Zwei zusätzliche SDK-Stubs (EarlyInit, pre_gpio_config) in src/sys/sdk_stubs.c ergänzt, siehe sdk/PATCHES.md.
164 lines
3.8 KiB
C
164 lines
3.8 KiB
C
/**************************************************************************
|
|
* File Name : dhcp_server.h
|
|
* Author :
|
|
* Version :
|
|
* Date :
|
|
* Description :
|
|
*
|
|
* Copyright (c) 2014 Winner Microelectronics Co., Ltd.
|
|
* All rights reserved.
|
|
*
|
|
***************************************************************************/
|
|
#ifndef __DHCP_SERVER_H_175137__
|
|
#define __DHCP_SERVER_H_175137__
|
|
|
|
#include "wm_config.h"
|
|
|
|
#if TLS_CONFIG_AP
|
|
#include "wm_sockets.h"
|
|
|
|
#define DHCPS_ERR_SUCCESS 0
|
|
#define DHCPS_ERR_LINKDOWN -1
|
|
#define DHCPS_ERR_PARAM -2
|
|
#define DHCPS_ERR_MEM -3
|
|
#define DHCPS_ERR_NOT_BIND -4
|
|
#define DHCPS_ERR_NOT_FOUND -5
|
|
#define DHCPS_ERR_INACTIVE -6
|
|
|
|
#define DHCPS_HISTORY_CLIENT_NUM 8
|
|
|
|
#define DHCP_DEFAULT_LEASE_TIME 7200 /* 2 Hours. */
|
|
#define DHCP_DEFAULT_LEASE_TIME_MS 7200000 /* 7200000ms */
|
|
#define DHCP_TICK_TIME 1000 /* 1s. */
|
|
#define DHCP_DEFFAULT_TIMEOUT 10 /* 500ms */
|
|
|
|
#define DHCP_HWTYPE_ETHERNET 1
|
|
|
|
/* udp port number of dhcp. */
|
|
#define DHCP_CLIENT_UDP_PORT 68
|
|
#define DHCP_SERVER_UDP_PORT 67
|
|
|
|
/* Magic number in DHCP packet. */
|
|
#define DHCP_MAGIC 0x63825363
|
|
|
|
#define DHCP_OP_REQUEST 1
|
|
#define DHCP_OP_REPLY 2
|
|
|
|
#define DHCP_OPTION_ID_PAD 0
|
|
#define DHCP_OPTION_ID_SUBNET_MASK 1
|
|
#define DHCP_OPTION_ID_DEF_GW 3
|
|
#define DHCP_OPTION_ID_DNS_SERVER 6
|
|
#define DHCP_OPTION_ID_LEASE_TIME 51
|
|
#define DHCP_OPTION_ID_MSG_TYPE 53
|
|
#define DHCP_OPTION_ID_SERVER_ID 54
|
|
#define DHCP_OPTION_ID_REQ_IP_ADDR 50
|
|
#define DHCP_OPTION_ID_END 255
|
|
|
|
#define DHCP_MSG_DISCOVER 1
|
|
#define DHCP_MSG_OFFER 2
|
|
#define DHCP_MSG_REQUEST 3
|
|
#define DHCP_MSG_DECLINE 4
|
|
#define DHCP_MSG_ACK 5
|
|
#define DHCP_MSG_NAK 6
|
|
#define DHCP_MSG_RELEASE 7
|
|
#define DHCP_MSG_INFORM 8
|
|
|
|
#ifdef INT8U
|
|
#undef INT8U
|
|
#endif
|
|
typedef unsigned char INT8U;
|
|
|
|
#ifdef INT8S
|
|
#undef INT8S
|
|
#endif
|
|
typedef signed char INT8S;
|
|
|
|
#ifdef INT16U
|
|
#undef INT16U
|
|
#endif
|
|
typedef unsigned short INT16U;
|
|
|
|
#ifdef INT32U
|
|
#undef INT32U
|
|
#endif
|
|
typedef unsigned int INT32U;
|
|
|
|
typedef enum __DHCP_CLIENT_STATE
|
|
{
|
|
DHCP_CLIENT_STATE_IDLE=0,
|
|
DHCP_CLIENT_STATE_SELECT,
|
|
DHCP_CLIENT_STATE_REQUEST,
|
|
DHCP_CLIENT_STATE_BIND
|
|
}DHCP_CLIENT_STATE;
|
|
|
|
typedef struct __DHCP_CLIENT
|
|
{
|
|
DHCP_CLIENT_STATE State;
|
|
INT32U Timeout;
|
|
/* Attention!!! MUST BE __align(4) */
|
|
ip_addr_t IpAddr;
|
|
INT8U MacAddr[6];
|
|
INT32U Lease;
|
|
}DHCP_CLIENT, *PDHCP_CLIENT;
|
|
|
|
typedef struct __DHCP_SERVER
|
|
{
|
|
INT8U Enable;
|
|
struct udp_pcb * Socket;
|
|
/* Attention!!! MUST BE __align(4) */
|
|
ip_addr_t ServerIpAddr;
|
|
ip_addr_t StartIpAddr;
|
|
ip_addr_t SubnetMask;
|
|
ip_addr_t GateWay;
|
|
ip_addr_t Dns1;
|
|
ip_addr_t Dns2;
|
|
INT32U LeaseTime;
|
|
DHCP_CLIENT Clients[DHCPS_HISTORY_CLIENT_NUM];
|
|
}DHCP_SERVER, *PDHCP_SERVER;
|
|
|
|
#define DHCPS_HADDR_SIZE 16
|
|
#define DHCPS_SNAME_SIZE 64
|
|
#define DHCPS_FILENAME_SIZE 128
|
|
#define DHCPS_OPTIONS_LEN 312
|
|
typedef struct __DHCP_MSG
|
|
{
|
|
INT8U Op;
|
|
INT8U HType;
|
|
INT8U HLen;
|
|
INT8U HOps;
|
|
|
|
INT32U Xid;
|
|
|
|
INT16U Secs;
|
|
INT16U Flags;
|
|
|
|
INT32U Ciaddr;
|
|
|
|
INT32U Yiaddr;
|
|
|
|
INT32U Siaddr;
|
|
|
|
INT32U Giaddr;
|
|
|
|
INT8U Chaddr[DHCPS_HADDR_SIZE];
|
|
|
|
INT8U Sname[DHCPS_SNAME_SIZE];
|
|
|
|
INT8U File[DHCPS_FILENAME_SIZE];
|
|
|
|
INT32U Magic;
|
|
|
|
INT8U Options[DHCPS_OPTIONS_LEN - 4];
|
|
}DHCP_MSG, *PDHCP_MSG;
|
|
|
|
INT8S DHCPS_Start(struct netif *Netif);
|
|
void DHCPS_Stop(void);
|
|
INT8S DHCPS_ClientDelete(INT8U * MacAddr);
|
|
void DHCPS_RecvCb(void *Arg, struct udp_pcb *Pcb, struct pbuf *P, ip_addr_t *Addr, INT16U Port);
|
|
void DHCPS_SetDns(INT8U numdns, INT32U dns);
|
|
ip_addr_t *DHCPS_GetIpByMac(const INT8U *mac_addr);
|
|
INT8U *DHCPS_GetMacByIp(const ip_addr_t *ipaddr);
|
|
#endif
|
|
#endif /* __DHCP_SERVER_H_175137__ */
|
|
|