kvm tools: Add helper to tell if a UDP package is a DHCP package

This patch checks:

   - sport and dport

   - magic cookie

to detemine whether a UDP package is a DHCP package.

Signed-off-by: Asias He <asias.hejun@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
This commit is contained in:
Asias He
2015-06-01 16:39:46 +01:00
committed by Will Deacon
parent b4db808201
commit 0c4bfcac1c
3 changed files with 22 additions and 0 deletions
+1
View File
@@ -61,6 +61,7 @@ OBJS += net/uip/tcp.o
OBJS += net/uip/udp.o
OBJS += net/uip/buf.o
OBJS += net/uip/csum.o
OBJS += net/uip/dhcp.o
OBJS += kvm-cmd.o
OBJS += mptable.o
OBJS += rbtree.o
+4
View File
@@ -30,9 +30,12 @@
#define UIP_TCP_FLAG_URG 32
#define UIP_DHCP_VENDOR_SPECIFIC_LEN 312
#define UIP_DHCP_PORT_SERVER 67
#define UIP_DHCP_PORT_CLIENT 68
#define UIP_DHCP_MACPAD_LEN 10
#define UIP_DHCP_HOSTNAME_LEN 64
#define UIP_DHCP_FILENAME_LEN 128
#define UIP_DHCP_MAGIC_COOKIE 0x63825363
#define UIP_DHCP_MAGIC_COOKIE_LEN 4
#define UIP_DHCP_OPTION_LEN (UIP_DHCP_VENDOR_SPECIFIC_LEN - UIP_DHCP_MAGIC_COOKIE_LEN)
/*
@@ -317,4 +320,5 @@ struct uip_buf *uip_buf_get_free(struct uip_info *info);
struct uip_buf *uip_buf_clone(struct uip_tx_arg *arg);
int uip_udp_make_pkg(struct uip_info *info, struct uip_udp_socket *sk, struct uip_buf *buf, u8 *payload, int payload_len);
bool uip_udp_is_dhcp(struct uip_udp *udp);
#endif /* KVM__UIP_H */
+17
View File
@@ -0,0 +1,17 @@
#include "kvm/uip.h"
bool uip_udp_is_dhcp(struct uip_udp *udp)
{
struct uip_dhcp *dhcp;
if (ntohs(udp->sport) != UIP_DHCP_PORT_CLIENT ||
ntohs(udp->dport) != UIP_DHCP_PORT_SERVER)
return false;
dhcp = (struct uip_dhcp *)udp;
if (ntohl(dhcp->magic_cookie) != UIP_DHCP_MAGIC_COOKIE)
return false;
return true;
}