~ubuntu-branches/ubuntu/trusty/ipxe/trusty

« back to all changes in this revision

Viewing changes to src/net/cachedhcp.c

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2013-11-26 17:50:47 UTC
  • mfrom: (1.1.5) (17.1.1 trusty-proposed)
  • Revision ID: package-import@ubuntu.com-20131126175047-8uf02a31ul9wpqgx
Tags: 1.0.0+git-20131111.c3d1e78-1ubuntu1
* Merge from Debian unstable, remaining changes:
  - d/p/enable-https.patch: Enable HTTPS support.
  - d/control,grub-ipxe*: Split grub integration from ipxe->grub-ipxe.
  - d/control: Transition kvm-ipxe->ipxe-qemu for LTS->LTS upgrade.
  - d/ipxe-qemu.links: Add compat links from /usr/share/qemu to
    /usr/lib/ipxe/qemu.
  - d/ipxe-qemu.install: Install ne.rom as pxe-ne2k_isa.rom.
* All other changes dropped in preference to upstream Debian
  packaging.
* d/control: Add libiberty-dev to BD's to fix FTBFS.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * Copyright (C) 2009 Joshua Oreman <oremanj@rwcr.net>.
3
 
 *
4
 
 * This program is free software; you can redistribute it and/or
5
 
 * modify it under the terms of the GNU General Public License as
6
 
 * published by the Free Software Foundation; either version 2 of the
7
 
 * License, or any later version.
8
 
 *
9
 
 * This program is distributed in the hope that it will be useful, but
10
 
 * WITHOUT ANY WARRANTY; without even the implied warranty of
11
 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12
 
 * General Public License for more details.
13
 
 *
14
 
 * You should have received a copy of the GNU General Public License
15
 
 * along with this program; if not, write to the Free Software
16
 
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17
 
 * 02110-1301, USA.
18
 
 */
19
 
 
20
 
FILE_LICENCE ( GPL2_OR_LATER );
21
 
 
22
 
#include <stdio.h>
23
 
#include <stdlib.h>
24
 
#include <string.h>
25
 
#include <ipxe/dhcp.h>
26
 
#include <ipxe/dhcppkt.h>
27
 
#include <ipxe/netdevice.h>
28
 
#include <ipxe/iobuf.h>
29
 
#include <ipxe/uaccess.h>
30
 
 
31
 
/** @file
32
 
 *
33
 
 * Cached DHCP packet handling
34
 
 *
35
 
 */
36
 
 
37
 
/**
38
 
 * Store cached DHCPACK packet
39
 
 *
40
 
 * @v data              User pointer to cached DHCP packet data
41
 
 * @v len               Length of cached DHCP packet data
42
 
 * @ret rc              Return status code
43
 
 *
44
 
 * This function should be called by the architecture-specific
45
 
 * get_cached_dhcpack() handler.
46
 
 */
47
 
void store_cached_dhcpack ( userptr_t data, size_t len ) {
48
 
        struct dhcp_packet *dhcppkt;
49
 
        struct dhcphdr *dhcphdr;
50
 
        struct settings *parent;
51
 
        int rc;
52
 
 
53
 
        /* Create DHCP packet */
54
 
        dhcppkt = zalloc ( sizeof ( *dhcppkt ) + len );
55
 
        if ( ! dhcppkt )
56
 
                return;
57
 
 
58
 
        /* Fill in data for DHCP packet */
59
 
        dhcphdr = ( ( ( void * ) dhcppkt ) + sizeof ( * dhcppkt ) );
60
 
        copy_from_user ( dhcphdr, data, 0, len );
61
 
        dhcppkt_init ( dhcppkt, dhcphdr, len );
62
 
        DBG_HD ( dhcppkt->options.data, dhcppkt->options.used_len );
63
 
 
64
 
        /* Register settings on the last opened network device.
65
 
         * This will have the effect of registering cached settings
66
 
         * with a network device when "dhcp netX" is performed for that
67
 
         * device, which is usually what we want.
68
 
         */
69
 
        parent = netdev_settings ( last_opened_netdev() );
70
 
        if ( ( rc = register_settings ( &dhcppkt->settings, parent,
71
 
                                        DHCP_SETTINGS_NAME ) ) != 0 )
72
 
                DBG ( "DHCP could not register cached settings: %s\n",
73
 
                      strerror ( rc ) );
74
 
 
75
 
        dhcppkt_put ( dhcppkt );
76
 
 
77
 
        DBG ( "DHCP registered cached settings\n" );
78
 
}