//
// Copyright (C) 2000 Institut fuer Telematik, Universitaet Karlsruhe
// Copyright (C) 2004 Andras Varga
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This program 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 Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this program; if not, see <http://www.gnu.org/licenses/>.
//


cplusplus {{
#include "inet/common/INETDefs.h"
}}

namespace inet;

//
// Protocol field: taken from RFC 1700.
// Replacing old RFC1700 with newer (28/06/01) Protocol Numbers
//
enum IPProtocolId
{

    //  IP_PROT_HOPOPT    = 0;
    IP_PROT_ICMP = 1;
    IP_PROT_IGMP = 2;
    IP_PROT_IP = 4; // used for IP tunneling. FIXME: RFC1700 specifies =3 (old IPSuite) ???
    IP_PROT_TCP = 6;
    IP_PROT_EGP = 8;
    IP_PROT_IGP = 9;
    IP_PROT_UDP = 17;
    IP_PROT_XTP = 36;
    IP_PROT_IPv6 = 41;
    IP_PROT_RSVP = 46;
    IP_PROT_IPv6_ICMP = 58;
    IP_PROT_NONE = 59;
    IP_PROT_OSPF = 89;
    IP_PROT_PIM = 103;
    IP_PROT_SCTP = 132;
    IP_PROT_DSR  = 48;
    IP_PROT_MANET = 138;

    IP_PROT_IPv6EXT_HOP = 0;       // Hop-by-hop option header.
    IP_PROT_IPv6EXT_DEST = 60;     // Destination options header.
    IP_PROT_IPv6EXT_ROUTING = 43;  // Routing header.
    IP_PROT_IPv6EXT_FRAGMENT = 44; // Fragmentation/reassembly header.
    IP_PROT_IPv6EXT_AUTH = 51;     // Authentication header.
    IP_PROT_IPv6EXT_ESP = 50;      // Encapsulating security payload.
    IP_PROT_IPv6EXT_MOB = 135;      // Mobility Header for MIPv6 support.
}

class IPRegisterProtocolCommand
{
    int protocol @enum(IPProtocolId);
}
