/* * Copyright (c) 2017, Matias Fontanini * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following disclaimer * in the documentation and/or other materials provided with the * distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ #ifndef TINS_DHCPV6_H #define TINS_DHCPV6_H #include #include #include #include #include #include #include namespace Tins { namespace Memory { class OutputMemoryStream; } // Memory /** * \class DHCPv6 * \brief Represents a DHCPv6 PDU. */ class TINS_API DHCPv6 : public PDU { public: /** * Represents a DHCPv6 option. */ typedef PDUOption option; /** * The message types. */ enum MessageType { SOLICIT = 1, ADVERTISE, REQUEST, CONFIRM, RENEW, REBIND, REPLY, RELEASE, DECLINE, RECONFIGURE, INFO_REQUEST, RELAY_FORWARD, RELAY_REPLY, LEASE_QUERY, LEASE_QUERY_REPLY, LEASE_QUERY_DONE, LEASE_QUERY_DATA }; /** * The DHCPv6 options. */ enum OptionTypes { CLIENTID = 1, SERVERID, IA_NA, IA_TA, IA_ADDR, OPTION_REQUEST, PREFERENCE, ELAPSED_TIME, RELAY_MSG, AUTH = 11, UNICAST, STATUS_CODE, RAPID_COMMIT, USER_CLASS, VENDOR_CLASS, VENDOR_OPTS, INTERFACE_ID, RECONF_MSG, RECONF_ACCEPT, SIP_SERVER_D, SIP_SERVER_A, DNS_SERVERS, DOMAIN_LIST, IA_PD, IAPREFIX, NIS_SERVERS, NISP_SERVERS, NIS_DOMAIN_NAME, NISP_DOMAIN_NAME, SNTP_SERVERS, INFORMATION_REFRESH_TIME, BCMCS_SERVER_D, BCMCS_SERVER_A, GEOCONF_CIVIC = 36, REMOTE_ID, SUBSCRIBER_ID, CLIENT_FQDN, PANA_AGENT, NEW_POSIX_TIMEZONE, NEW_TZDB_TIMEZONE, ERO, LQ_QUERY, CLIENT_DATA, CLT_TIME, LQ_RELAY_DATA, LQ_CLIENT_LINK, MIP6_HNIDF, MIP6_VDINF, V6_LOST, CAPWAP_AC_V6, RELAY_ID, NTP_SERVER, V6_ACCESS_DOMAIN, SIP_UA_CS_LIST, BOOTFILE_URL, BOOTFILE_PARAM, CLIENT_ARCH_TYPE, NII, GEOLOCATION, AFTR_NAME, ERP_LOCAL_DOMAIN_NAME, RSOO, PD_EXCLUDE, VSS, MIP6_IDINF, MIP6_UDINF, MIP6_HNP, MIP6_HAA, MIP6_HAF, RDNSS_SELECTION, KRB_PRINCIPAL_NAME, KRB_REALM_NAME, KRB_DEFAULT_REALM_NAME, KRB_KDC }; /** * The type used to store the DHCPv6 options. */ typedef std::vector