c732d49e |
/*
* Copyright (C) 2017, University of the Basque Country (UPV/EHU)
* Contact for licensing options: <licensing-mcpttclient(at)mcopenplatform(dot)com>
*
* The original file was part of Open Source Doubango Framework
* Copyright (C) 2010-2011 Mamadou Diop.
* Copyright (C) 2012 Doubango Telecom <http://doubango.org>
*
* This file is part of Open Source Doubango Framework.
*
* DOUBANGO is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* DOUBANGO is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with DOUBANGO.
*
*/
/**@file tnet_dhcp6_message.h
* @brief DHCPv6 (RFC 3315) Messages.
*
* @author Mamadou Diop <diopmamadou(at)doubango[dot]org>
*
*/
#ifndef TNET_DHCP6_MESSAGE_H
#define TNET_DHCP6_MESSAGE_H
#include "tinynet_config.h"
#include "tnet_dhcp6_option.h"
#include "tsk_object.h"
TNET_BEGIN_DECLS
struct tnet_dhcp6_ctx_s;
/** List of all supported DHCPv6 messages.
* For more info: RFC 3315 - 5.3. DHCP Message Types
*/
typedef enum tnet_dhcp6_message_type_e
{
/* A client sends a Solicit message to locate servers. */
dhcp6_type_solicit = 1,
/* A server sends an Advertise message to indicate that it is available for DHCP service, in
response to a Solicit message received from a client. */
dhcp6_type_advertise = 2,
/* A client sends a Request message to request configuration parameters, including IP
addresses, from a specific server. */
dhcp6_type_request = 3,
/* A client sends a Confirm message to any available server to determine whether the
addresses it was assigned are still appropriate to the link to which the client is connected. */
dhcp6_type_confirm = 4,
/* A client sends a Renew message to the server that originally provided the client's addresses
and configuration parameters to extend the lifetimes on the addresses assigned to the
client and to update other configurationparameters. */
dhcp6_type_renew = 5,
/* A client sends a Rebind message to any available server to extend the lifetimes on the
addresses assigned to the client and to update other configuration parameters; this message is
sent after a client receives no response to a Renew message.*/
dhcp6_type_rebind = 6,
/* A server sends a Reply message containing assigned addresses and configuration parameters
in response to a Solicit, Request, Renew, Rebind message received from a client. A
server sends a Reply message containing configuration parameters in response to an
Information-request message. A server sends a Reply message in response to a Confirm message
confirming or denying that the addresses assigned to the client are appropriate to the
link to which the client is connected. A server sends a Reply message to acknowledge
receipt of a Release or Decline message.*/
dhcp6_type_reply = 7,
/* A client sends a Release message to the server that assigned addresses to the client to
indicate that the client will no longer use one or more of the assigned addresses.*/
dhcp6_type_release = 8,
/* A client sends a Decline message to a server to indicate that the client has determined that
one or more addresses assigned by the server are already in use on the link to which the
client is connected.*/
dhcp6_type_decline = 9,
/*A server sends a Reconfigure message to a client to inform the client that the server has
new or updated configuration parameters, and that the client is to initiate a Renew/Reply
or Information-request/Reply transaction with the server in order to receive the updatedinformation. */
dhcp6_type_reconfigure = 10,
/* A client sends an Information-request message to a server to request configuration
parameters without the assignment of any IP addresses to the client.*/
dhcp6_type_information_request = 11,
/* A relay agent sends a Relay-forward message to relay messages to servers, either directly
or through another relay agent. The received message, either a client message or a
Relay-forward message from another relay agent, is encapsulated in an option in the Relay-forward message.*/
dhcp6_type_relay_forw = 12,
/* A server sends a Relay-reply message to a relay agent containing a message that the relay
agent delivers to a client. The Relay-reply message may be relayed by other relay agents
for delivery to the destination relay agent.
The server encapsulates the client message as an option in the Relay-reply message, which the
relay agent extracts and relays to the client.*/
dhcp6_type_relay_repl = 13,
}
tnet_dhcp6_message_type_t;
/** DHCPv6 message (common fields) as per RFC 3315 subclause 6.
*/
typedef struct tnet_dhcp6_message_s
{
TSK_DECLARE_OBJECT;
/*
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| msg-type | transaction-id |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. options .
. (variable) .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
/* Identifies the DHCP message type. 1-byte value. */
tnet_dhcp6_message_type_t type;
/* The transaction ID for this message exchange. 3-bytes value. */
uint32_t transaction_id;
/* Options carried in this message. */
tnet_dhcp6_options_L_t *options;
}
tnet_dhcp6_message_t;
typedef tsk_list_t tnet_dhcp6_messages_L_t;
typedef tnet_dhcp6_message_t tnet_dhcp6_request_t;
typedef tnet_dhcp6_message_t tnet_dhcp6_reply_t;
tsk_buffer_t* tnet_dhcp6_message_serialize(const struct tnet_dhcp6_ctx_s *ctx, const tnet_dhcp6_message_t *self);
tnet_dhcp6_message_t* tnet_dhcp6_message_deserialize(const struct tnet_dhcp6_ctx_s *ctx, const uint8_t *data, tsk_size_t size);
TINYNET_API tnet_dhcp6_message_t* tnet_dhcp6_message_create(tnet_dhcp6_message_type_t type);
TINYNET_API tnet_dhcp6_request_t* tnet_dhcp6_request_create(tnet_dhcp6_message_type_t type);
TINYNET_GEXTERN const tsk_object_def_t *tnet_dhcp6_message_def_t;
TNET_END_DECLS
#endif /* TNET_DHCP6_MESSAGE_H */ |