From 442c60166a9165e4253fd091aba92c04c699017d Mon Sep 17 00:00:00 2001 From: Timm Gleason Date: Sat, 7 Jan 2012 17:09:18 +0100 Subject: lua: Adding dhcp support Adds DHCPINFO functionality to the lua.c32 binary gettable() returns a table of the BOOTP message fields returned by the DHCP server for use in a Lua pxeboot script See http://tools.ietf.org/html/rfc1542 lua key value RFC key ----------------------------------------------------------------------- opcode op message opcode hardware.type htype Hardware address type hardware.length hlen Hardware address length hops hops Used by relay agents transaction.id xid transaction id elapsed.seconds secs Secs elapsed since client boot flags flags DHCP Flags field client.ip.addr ciaddr client IP addr your.ip.addr yiaddr 'Your' IP addr. (from server) server.ip.addr siaddr Boot server IP addr gateway.ip.addr giaddr Relay agent IP addr client.mac chaddr Client hardware addr server.hostname sname Optl. boot server hostname boot.file file boot file name (ascii path) magic.cookie cookie Magic cookie getoptions() returns a table of the DHCP Options field of the BOOTP message returned by the DHCP server for use in a Lua pxeboot script. Many of the options are reurned formatted in as strings in a standard, recognizable format, such as IP addresses. 1, 2, and 4 byte numerical options are returned as integers. Other Options with non-standard formats are returned as strings of the raw binary number that was returned by the DHCP server and must be decoded in a Lua script The Options table returns the Option code as the key except where there are multiple values returned. In those cases, an extra key increment number is added to allow individual access to each Option value. lua key value value Name ----------------------------------------------------------------------- 1 Subnet Mask 6.1 DNS Server [element 1] 6.2 DNS Server [element 2] 6.3 DNS Server [element 3] 209 PXE Configuration File 21.1 Policy Filter [element 1] 21.2 Policy Filter [element 2] Options that can have a list of values, but contain only one (like Option 6) will not return with .sub key values. Usage: t = dhcp.gettable() for k,v in pairs(t) do print(k.." : "..v) end --- com32/lua/src/dhcp.h | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 com32/lua/src/dhcp.h (limited to 'com32/lua/src/dhcp.h') diff --git a/com32/lua/src/dhcp.h b/com32/lua/src/dhcp.h new file mode 100644 index 00000000..a398cfc1 --- /dev/null +++ b/com32/lua/src/dhcp.h @@ -0,0 +1,49 @@ +/* ----------------------------------------------------------------------- * + * + * Copyright 2007 H. Peter Anvin - All Rights Reserved + * Copyright 2011 Timothy J Gleason - All Rights Reserved + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall + * be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * ----------------------------------------------------------------------- */ + +#include + +typedef struct dhcp { + uint8_t op; /* message opcode */ + uint8_t htype; /* Hardware address type */ + uint8_t hlen; /* Hardware address length */ + uint8_t hops; /* Used by relay agents */ + uint32_t xid; /* transaction id */ + uint16_t secs; /* Secs elapsed since client boot */ + uint16_t flags; /* DHCP Flags field */ + uint8_t ciaddr[4]; /* client IP addr */ + uint8_t yiaddr[4]; /* 'Your' IP addr. (from server) */ + uint8_t siaddr[4]; /* Boot server IP addr */ + uint8_t giaddr[4]; /* Relay agent IP addr */ + uint8_t chaddr[16]; /* Client hardware addr */ + uint8_t sname[64]; /* Optl. boot server hostname */ + uint8_t file[128]; /* boot file name (ascii path) */ + uint8_t cookie[4]; /* Magic cookie */ + uint8_t options[1020]; /* Options */ +} dhcp_t; + -- cgit v1.2.1