iPXE
Functions
fakedhcp.h File Reference

Fake DHCP packets. More...

#include <stdint.h>

Go to the source code of this file.

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 
 FILE_SECBOOT (PERMITTED)
 
int create_fakedhcpdiscover (struct net_device *netdev, void *data, size_t max_len)
 Create fake DHCPDISCOVER packet. More...
 
int create_fakedhcpack (struct net_device *netdev, void *data, size_t max_len)
 Create fake DHCPACK packet. More...
 
int create_fakepxebsack (struct net_device *netdev, void *data, size_t max_len)
 Create fake PXE Boot Server ACK packet. More...
 

Detailed Description

Fake DHCP packets.

Definition in file fakedhcp.h.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL  )

◆ FILE_SECBOOT()

FILE_SECBOOT ( PERMITTED  )

◆ create_fakedhcpdiscover()

int create_fakedhcpdiscover ( struct net_device netdev,
void *  data,
size_t  max_len 
)

Create fake DHCPDISCOVER packet.

Parameters
netdevNetwork device
dataBuffer for DHCP packet
max_lenSize of DHCP packet buffer
Return values
rcReturn status code

Used by external code.

Definition at line 110 of file fakedhcp.c.

111  {
112  struct dhcp_packet dhcppkt;
113  struct in_addr ciaddr = { 0 };
114  int rc;
115 
116  if ( ( rc = dhcp_create_request ( &dhcppkt, netdev, DHCPDISCOVER,
117  dhcp_last_xid, ciaddr, data,
118  max_len ) ) != 0 ) {
119  DBG ( "Could not create DHCPDISCOVER: %s\n",
120  strerror ( rc ) );
121  return rc;
122  }
123 
124  return 0;
125 }
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
A DHCP packet.
Definition: dhcppkt.h:21
int dhcp_create_request(struct dhcp_packet *dhcppkt, struct net_device *netdev, unsigned int msgtype, uint32_t xid, struct in_addr ciaddr, void *data, size_t max_len)
Create DHCP request packet.
Definition: dhcp.c:1008
static struct net_device * netdev
Definition: gdbudp.c:52
char * strerror(int errno)
Retrieve string representation of error number.
Definition: strerror.c:79
#define DHCPDISCOVER
Definition: dhcp.h:198
IP address structure.
Definition: in.h:42
uint32_t dhcp_last_xid
Most recent DHCP transaction ID.
Definition: dhcp.c:125
uint8_t data[48]
Additional event data.
Definition: ena.h:22
#define DBG(...)
Print a debugging message.
Definition: compiler.h:498

References data, DBG, dhcp_create_request(), dhcp_last_xid, DHCPDISCOVER, netdev, rc, and strerror().

Referenced by efi_pxe_fake_all().

◆ create_fakedhcpack()

int create_fakedhcpack ( struct net_device netdev,
void *  data,
size_t  max_len 
)

Create fake DHCPACK packet.

Parameters
netdevNetwork device
dataBuffer for DHCP packet
max_lenSize of DHCP packet buffer
Return values
rcReturn status code

Used by external code.

Definition at line 137 of file fakedhcp.c.

138  {
139  struct dhcp_packet dhcppkt;
140  int rc;
141 
142  /* Create base DHCPACK packet */
143  if ( ( rc = dhcp_create_packet ( &dhcppkt, netdev, DHCPACK,
144  dhcp_last_xid, NULL, 0,
145  data, max_len ) ) != 0 ) {
146  DBG ( "Could not create DHCPACK: %s\n", strerror ( rc ) );
147  return rc;
148  }
149 
150  /* Merge in globally-scoped settings, then netdev-specific
151  * settings. Do it in this order so that netdev-specific
152  * settings take precedence regardless of stated priorities.
153  */
154  if ( ( rc = copy_settings ( &dhcppkt, NULL ) ) != 0 ) {
155  DBG ( "Could not set DHCPACK global settings: %s\n",
156  strerror ( rc ) );
157  return rc;
158  }
159  if ( ( rc = copy_settings ( &dhcppkt,
160  netdev_settings ( netdev ) ) ) != 0 ) {
161  DBG ( "Could not set DHCPACK netdev settings: %s\n",
162  strerror ( rc ) );
163  return rc;
164  }
165 
166  return 0;
167 }
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
A DHCP packet.
Definition: dhcppkt.h:21
static int copy_settings(struct dhcp_packet *dest, struct settings *source)
Copy settings to DHCP packet.
Definition: fakedhcp.c:95
static struct settings * netdev_settings(struct net_device *netdev)
Get per-netdevice configuration settings block.
Definition: netdevice.h:587
int dhcp_create_packet(struct dhcp_packet *dhcppkt, struct net_device *netdev, uint8_t msgtype, uint32_t xid, const void *options, size_t options_len, void *data, size_t max_len)
Create a DHCP packet.
Definition: dhcp.c:945
static struct net_device * netdev
Definition: gdbudp.c:52
char * strerror(int errno)
Retrieve string representation of error number.
Definition: strerror.c:79
#define DHCPACK
Definition: dhcp.h:202
uint32_t dhcp_last_xid
Most recent DHCP transaction ID.
Definition: dhcp.c:125
uint8_t data[48]
Additional event data.
Definition: ena.h:22
#define DBG(...)
Print a debugging message.
Definition: compiler.h:498
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322

References copy_settings(), data, DBG, dhcp_create_packet(), dhcp_last_xid, DHCPACK, netdev, netdev_settings(), NULL, rc, and strerror().

Referenced by create_fakepxebsack(), efi_pxe_fake_all(), and nbi_prepare_dhcp().

◆ create_fakepxebsack()

int create_fakepxebsack ( struct net_device netdev,
void *  data,
size_t  max_len 
)

Create fake PXE Boot Server ACK packet.

Parameters
netdevNetwork device
dataBuffer for DHCP packet
max_lenSize of DHCP packet buffer
Return values
rcReturn status code

Used by external code.

Definition at line 179 of file fakedhcp.c.

180  {
181  struct dhcp_packet dhcppkt;
182  struct settings *proxy_settings;
183  struct settings *pxebs_settings;
184  int rc;
185 
186  /* Identify available settings */
187  proxy_settings = find_settings ( PROXYDHCP_SETTINGS_NAME );
188  pxebs_settings = find_settings ( PXEBS_SETTINGS_NAME );
189  if ( ( ! proxy_settings ) && ( ! pxebs_settings ) ) {
190  /* No PXE boot server; return the regular DHCPACK */
191  return create_fakedhcpack ( netdev, data, max_len );
192  }
193 
194  /* Create base DHCPACK packet */
195  if ( ( rc = dhcp_create_packet ( &dhcppkt, netdev, DHCPACK,
196  dhcp_last_xid, NULL, 0,
197  data, max_len ) ) != 0 ) {
198  DBG ( "Could not create PXE BS ACK: %s\n",
199  strerror ( rc ) );
200  return rc;
201  }
202 
203  /* Populate ciaddr */
204  fetch_ipv4_setting ( netdev_settings ( netdev ), &ip_setting,
205  &dhcppkt.dhcphdr->ciaddr );
206 
207  /* Merge in ProxyDHCP options */
208  if ( proxy_settings &&
209  ( ( rc = copy_settings ( &dhcppkt, proxy_settings ) ) != 0 ) ) {
210  DBG ( "Could not copy ProxyDHCP settings: %s\n",
211  strerror ( rc ) );
212  return rc;
213  }
214 
215  /* Merge in BootServerDHCP options, if present */
216  if ( pxebs_settings &&
217  ( ( rc = copy_settings ( &dhcppkt, pxebs_settings ) ) != 0 ) ) {
218  DBG ( "Could not copy PXE BS settings: %s\n",
219  strerror ( rc ) );
220  return rc;
221  }
222 
223  return 0;
224 }
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
A DHCP packet.
Definition: dhcppkt.h:21
int fetch_ipv4_setting(struct settings *settings, const struct setting *setting, struct in_addr *inp)
Fetch value of IPv4 address setting.
Definition: settings.c:913
int create_fakedhcpack(struct net_device *netdev, void *data, size_t max_len)
Create fake DHCPACK packet.
Definition: fakedhcp.c:137
static int copy_settings(struct dhcp_packet *dest, struct settings *source)
Copy settings to DHCP packet.
Definition: fakedhcp.c:95
static struct settings * netdev_settings(struct net_device *netdev)
Get per-netdevice configuration settings block.
Definition: netdevice.h:587
int dhcp_create_packet(struct dhcp_packet *dhcppkt, struct net_device *netdev, uint8_t msgtype, uint32_t xid, const void *options, size_t options_len, void *data, size_t max_len)
Create a DHCP packet.
Definition: dhcp.c:945
#define PROXYDHCP_SETTINGS_NAME
Settings block name used for ProxyDHCP responses.
Definition: dhcp.h:714
static struct net_device * netdev
Definition: gdbudp.c:52
#define PXEBS_SETTINGS_NAME
Setting block name used for BootServerDHCP responses.
Definition: dhcp.h:717
char * strerror(int errno)
Retrieve string representation of error number.
Definition: strerror.c:79
A settings block.
Definition: settings.h:133
#define DHCPACK
Definition: dhcp.h:202
uint32_t dhcp_last_xid
Most recent DHCP transaction ID.
Definition: dhcp.c:125
struct settings * find_settings(const char *name)
Find settings block.
Definition: settings.c:407
uint8_t data[48]
Additional event data.
Definition: ena.h:22
#define DBG(...)
Print a debugging message.
Definition: compiler.h:498
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322

References dhcphdr::ciaddr, copy_settings(), create_fakedhcpack(), data, DBG, dhcp_create_packet(), dhcp_last_xid, DHCPACK, dhcp_packet::dhcphdr, fetch_ipv4_setting(), find_settings(), netdev, netdev_settings(), NULL, PROXYDHCP_SETTINGS_NAME, PXEBS_SETTINGS_NAME, rc, and strerror().

Referenced by efi_pxe_fake_all().