Blame iscsiuio/src/apps/dhcpc/dhcpc.h

Packit eace71
/*
Packit eace71
 * Copyright (c) 2005, Swedish Institute of Computer Science
Packit eace71
 * All rights reserved.
Packit eace71
 *
Packit eace71
 * Redistribution and use in source and binary forms, with or without
Packit eace71
 * modification, are permitted provided that the following conditions
Packit eace71
 * are met:
Packit eace71
 * 1. Redistributions of source code must retain the above copyright
Packit eace71
 *    notice, this list of conditions and the following disclaimer.
Packit eace71
 * 2. Redistributions in binary form must reproduce the above copyright
Packit eace71
 *    notice, this list of conditions and the following disclaimer in the
Packit eace71
 *    documentation and/or other materials provided with the distribution.
Packit eace71
 * 3. Neither the name of the Institute nor the names of its contributors
Packit eace71
 *    may be used to endorse or promote products derived from this software
Packit eace71
 *    without specific prior written permission.
Packit eace71
 *
Packit eace71
 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
Packit eace71
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Packit eace71
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
Packit eace71
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
Packit eace71
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Packit eace71
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
Packit eace71
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
Packit eace71
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
Packit eace71
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
Packit eace71
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
Packit eace71
 * SUCH DAMAGE.
Packit eace71
 *
Packit eace71
 * This file is part of the uIP TCP/IP stack
Packit eace71
 *
Packit eace71
 */
Packit eace71
#ifndef __DHCPC_H__
Packit eace71
#define __DHCPC_H__
Packit eace71
Packit eace71
#include <time.h>
Packit eace71
Packit eace71
#include "nic.h"
Packit eace71
#include "timer.h"
Packit eace71
#include "pt.h"
Packit eace71
#include "uip.h"
Packit eace71
Packit eace71
#define STATE_INITIAL         0
Packit eace71
#define STATE_SENDING         1
Packit eace71
#define STATE_OFFER_RECEIVED  2
Packit eace71
#define STATE_CONFIG_RECEIVED 3
Packit eace71
Packit eace71
struct dhcpc_state {
Packit eace71
	struct pt pt;
Packit eace71
Packit eace71
	nic_t *nic;
Packit eace71
	struct uip_stack *ustack;
Packit eace71
	char state;
Packit eace71
	struct uip_udp_conn *conn;
Packit eace71
	struct timer timer;
Packit eace71
	u32_t ticks;
Packit eace71
	const void *mac_addr;
Packit eace71
	int mac_len;
Packit eace71
Packit eace71
	u8_t serverid[4];
Packit eace71
Packit eace71
	u16_t lease_time[2];
Packit eace71
	u32_t lease_time_nl32;
Packit eace71
	u16_t ipaddr[2];
Packit eace71
	u16_t netmask[2];
Packit eace71
	u16_t dnsaddr[2];
Packit eace71
	u16_t default_router[2];
Packit eace71
Packit eace71
	time_t last_update;
Packit eace71
};
Packit eace71
Packit eace71
struct dhcpc_options {
Packit eace71
	u8_t enable_random_xid;
Packit eace71
	u8_t xid[4];
Packit eace71
};
Packit eace71
Packit eace71
int dhcpc_init(nic_t *nic, struct uip_stack *ustack,
Packit eace71
	       const void *mac_addr, int mac_len);
Packit eace71
void dhcpc_request(struct uip_stack *ustack);
Packit eace71
Packit eace71
void dhcpc_appcall(struct uip_stack *ustack);
Packit eace71
Packit eace71
void dhcpc_configured(const struct dhcpc_state *s);
Packit eace71
Packit eace71
#define UIP_UDP_APPCALL dhcpc_appcall
Packit eace71
Packit eace71
#endif /* __DHCPC_H__ */