diff options
Diffstat (limited to 'lib/includes/hicn/protocol')
-rw-r--r-- | lib/includes/hicn/protocol/ah.h | 19 | ||||
-rw-r--r-- | lib/includes/hicn/protocol/icmp.h | 12 | ||||
-rw-r--r-- | lib/includes/hicn/protocol/icmprd.h | 12 | ||||
-rw-r--r-- | lib/includes/hicn/protocol/ipv4.h | 49 | ||||
-rw-r--r-- | lib/includes/hicn/protocol/ipv6.h | 36 | ||||
-rw-r--r-- | lib/includes/hicn/protocol/new.h | 88 | ||||
-rw-r--r-- | lib/includes/hicn/protocol/tcp.h | 102 | ||||
-rw-r--r-- | lib/includes/hicn/protocol/udp.h | 4 |
8 files changed, 210 insertions, 112 deletions
diff --git a/lib/includes/hicn/protocol/ah.h b/lib/includes/hicn/protocol/ah.h index a59a5051a..36fd7d509 100644 --- a/lib/includes/hicn/protocol/ah.h +++ b/lib/includes/hicn/protocol/ah.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2019 Cisco and/or its affiliates. + * Copyright (c) 2021 Cisco and/or its affiliates. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: @@ -35,16 +35,19 @@ typedef struct { - u8 nh; // (to match with reserved in IPSEC AH) - u8 payloadlen; // Len of signature/HMAC in 4-bytes words + u8 nh; // To match with reserved in IPSEC AH + // Length of the signature field. Note that the signature might be smaller + // than the field: the actual size is computed from the field size and + // signaturePadding. + u8 payloadlen; union { u16 reserved; struct { - u8 validationAlgorithm; // As defined in parc_SignerAlgorithm.h - u8 unused; // Unused (to match with reserved in IPSEC AH) + u8 validationAlgorithm; + u8 signaturePadding; }; }; union @@ -60,12 +63,12 @@ typedef struct u32 timestamp_as_u32[2]; }; // ICV would follow - u8 keyId[32]; // Hash of the pub key + u8 keyId[32]; // Hash of pub key /* 44 B + validationPayload */ - u8 validationPayload[0]; // Holds the signature + u8 validationPayload[0]; // Holds the signature } _ah_header_t; -#define AH_HDRLEN sizeof(_ah_header_t) +#define AH_HDRLEN sizeof (_ah_header_t) static_assert (EXPECTED_AH_HDRLEN == AH_HDRLEN, "Size of AH Struct does not match its expected size."); diff --git a/lib/includes/hicn/protocol/icmp.h b/lib/includes/hicn/protocol/icmp.h index 36954bb6d..9315e1e56 100644 --- a/lib/includes/hicn/protocol/icmp.h +++ b/lib/includes/hicn/protocol/icmp.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2019 Cisco and/or its affiliates. + * Copyright (c) 2021 Cisco and/or its affiliates. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: @@ -34,7 +34,7 @@ typedef struct u16 csum; } _icmp_header_t; -#define ICMP_HDRLEN sizeof(_icmp_header_t) +#define ICMP_HDRLEN sizeof (_icmp_header_t) static_assert (EXPECTED_ICMP_HDRLEN == ICMP_HDRLEN, "Size of ICMP struct does not match its expected size."); @@ -54,13 +54,13 @@ typedef struct { u16 id; u16 sequence; - } echo; /* echo datagram */ - u32 gateway; /* gateway address */ + } echo; /* echo datagram */ + u32 gateway; /* gateway address */ struct { u16 _unused; u16 mtu; - } frag; /* path mtu discovery */ + } frag; /* path mtu discovery */ struct { u16 expected_lbl; @@ -69,7 +69,7 @@ typedef struct }; } _icmp_wldr_header_t; -#define ICMPWLDR_HDRLEN sizeof(_icmp_wldr_header_t) +#define ICMPWLDR_HDRLEN sizeof (_icmp_wldr_header_t) static_assert (EXPECTED_ICMPWLDR_HDRLEN == ICMPWLDR_HDRLEN, "Size of ICMPWLDR struct does not match its expected size."); diff --git a/lib/includes/hicn/protocol/icmprd.h b/lib/includes/hicn/protocol/icmprd.h index aa1fa01ae..17088c22a 100644 --- a/lib/includes/hicn/protocol/icmprd.h +++ b/lib/includes/hicn/protocol/icmprd.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2019 Cisco and/or its affiliates. + * Copyright (c) 2021 Cisco and/or its affiliates. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: @@ -33,12 +33,12 @@ typedef struct u8 type; u8 code; u16 csum; - ip4_address_t ip; + ipv4_address_t ip; _ipv4_header_t iph; u8 data[64]; } _icmprd4_header_t; -#define ICMPRD4_HDRLEN sizeof(_icmprd4_header_t) +#define ICMPRD4_HDRLEN sizeof (_icmprd4_header_t) static_assert (EXPECTED_ICMPRD4_HDRLEN == ICMPRD4_HDRLEN, "Size of ICMPWLDR struct does not match its expected size."); @@ -53,11 +53,11 @@ typedef struct u8 code; u16 csum; u32 res; - ip6_address_t tgt; - ip6_address_t dst; + ipv6_address_t tgt; + ipv6_address_t dst; } _icmprd_header_t; -#define ICMPRD_HDRLEN sizeof(_icmprd_header_t) +#define ICMPRD_HDRLEN sizeof (_icmprd_header_t) static_assert (EXPECTED_ICMPRD_HDRLEN == ICMPRD_HDRLEN, "Size of ICMPWLDR struct does not match its expected size."); diff --git a/lib/includes/hicn/protocol/ipv4.h b/lib/includes/hicn/protocol/ipv4.h index 8a5b6683b..89435b516 100644 --- a/lib/includes/hicn/protocol/ipv4.h +++ b/lib/includes/hicn/protocol/ipv4.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2019 Cisco and/or its affiliates. + * Copyright (c) 2021 Cisco and/or its affiliates. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: @@ -16,9 +16,10 @@ #ifndef HICN_PROTOCOL_IPV4 #define HICN_PROTOCOL_IPV4 +#include <hicn/util/ip_address.h> + #include "../base.h" #include "../common.h" -#include "../protocol.h" /* Headers were adapted from linux' definitions in netinet/ip.h */ @@ -34,11 +35,11 @@ typedef struct struct { #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ - u8 ihl:4; - u8 version:4; + u8 ihl : 4; + u8 version : 4; #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ - u8 version:4; - u8 ihl:4; + u8 version : 4; + u8 ihl : 4; #else #error "Unsupported endianness" #endif @@ -53,13 +54,14 @@ typedef struct u8 ttl; u8 protocol; u16 csum; - ip4_address_t saddr; - ip4_address_t daddr; + ipv4_address_t saddr; + ipv4_address_t daddr; } _ipv4_header_t; -#define ipv4_header_bytes(ipv4_header) (sizeof(u32) * (ipv4_header->version_ihl & 0xf)) +#define ipv4_header_bytes(ipv4_header) \ + (sizeof (u32) * (ipv4_header->version_ihl & 0xf)) -#define IPV4_HDRLEN sizeof(_ipv4_header_t) +#define IPV4_HDRLEN sizeof (_ipv4_header_t) static_assert (EXPECTED_IPV4_HDRLEN == IPV4_HDRLEN, "Size of IPV4 struct does not match its expected size."); @@ -70,29 +72,28 @@ static_assert (EXPECTED_IPV4_HDRLEN == IPV4_HDRLEN, typedef struct { - ip4_address_t ip_src; - ip4_address_t ip_dst; + ipv4_address_t ip_src; + ipv4_address_t ip_dst; u8 zero; u8 protocol; u16 size; } ipv4_pseudo_header_t; -#define IPV4_PSHDRLEN sizeof(ipv4_pseudo_header_t) +#define IPV4_PSHDRLEN sizeof (ipv4_pseudo_header_t) static_assert (EXPECTED_IPV4_PSHDRLEN == IPV4_PSHDRLEN, "Size of IPV4_PSHDR struct does not match its expected size."); /* Default field values */ -#define IPV4_DEFAULT_VERSION 4 -#define IPV4_DEFAULT_IHL 5 -#define IPV4_DEFAULT_TOS 0 -#define IPV4_DEFAULT_PAYLOAD_LENGTH 0 -#define IPV4_DEFAULT_ID 300 -#define IPV4_DEFAULT_FRAG_OFF 0x000 -#define IPV4_DEFAULT_TTL 64 -#define IPV4_DEFAULT_PROTOCOL IPPROTO_TCP -#define IPV4_DEFAULT_SRC_IP 0, 0, 0, 0 -#define IPV4_DEFAULT_DST_IP 0, 0, 0, 0 - +#define IPV4_DEFAULT_VERSION 4 +#define IPV4_DEFAULT_IHL 5 +#define IPV4_DEFAULT_TOS 0 +#define IPV4_DEFAULT_PAYLOAD_LENGTH 0 +#define IPV4_DEFAULT_ID 300 +#define IPV4_DEFAULT_FRAG_OFF 0x000 +#define IPV4_DEFAULT_TTL 64 +#define IPV4_DEFAULT_PROTOCOL IPPROTO_TCP +#define IPV4_DEFAULT_SRC_IP 0, 0, 0, 0 +#define IPV4_DEFAULT_DST_IP 0, 0, 0, 0 #endif /* HICN_PROTOCOL_IPV4 */ diff --git a/lib/includes/hicn/protocol/ipv6.h b/lib/includes/hicn/protocol/ipv6.h index 5a83abcae..6e8e30af3 100644 --- a/lib/includes/hicn/protocol/ipv6.h +++ b/lib/includes/hicn/protocol/ipv6.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2019 Cisco and/or its affiliates. + * Copyright (c) 2021 Cisco and/or its affiliates. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: @@ -16,6 +16,8 @@ #ifndef HICN_PROTOCOL_IPV6_H #define HICN_PROTOCOL_IPV6_H +#include <hicn/util/ip_address.h> + #include "../common.h" /* @@ -25,22 +27,26 @@ typedef struct { +#if 0 // TEMPORARY FIX union { struct { - u32 version_class_flow; /* version, traffic class and 20 bits of flow-ID */ - u16 len; /* payload length */ - u8 nxt; /* next header */ - u8 hlim; /* hop limit */ +#endif + u32 version_class_flow; /* version, traffic class and 20 bits of flow-ID */ + u16 len; /* payload length */ + u8 nxt; /* next header */ + u8 hlim; /* hop limit */ +#if 0 }; u8 vfc; /* 4 bits version, top 4 bits class */ }; - ip6_address_t saddr; /* source address */ - ip6_address_t daddr; /* destination address */ +#endif + ipv6_address_t saddr; /* source address */ + ipv6_address_t daddr; /* destination address */ } _ipv6_header_t; -#define IPV6_HDRLEN sizeof(_ipv6_header_t) +#define IPV6_HDRLEN sizeof (_ipv6_header_t) static_assert (EXPECTED_IPV6_HDRLEN == IPV6_HDRLEN, "Size of IPV6 struct does not match its expected size."); @@ -51,23 +57,23 @@ static_assert (EXPECTED_IPV6_HDRLEN == IPV6_HDRLEN, typedef struct { - ip6_address_t ip_src; - ip6_address_t ip_dst; + ipv6_address_t ip_src; + ipv6_address_t ip_dst; u32 size; u16 zeros; u8 zero; u8 protocol; } ipv6_pseudo_header_t; -#define IPV6_PSHDRLEN sizeof(ipv6_pseudo_header_t) +#define IPV6_PSHDRLEN sizeof (ipv6_pseudo_header_t) static_assert (EXPECTED_IPV6_PSHDRLEN == IPV6_PSHDRLEN, "Size of IPV6_PSHDR struct does not match its expected size."); /* Default field values */ -#define IPV6_DEFAULT_VERSION 6 -#define IPV6_DEFAULT_TRAFFIC_CLASS 0 -#define IPV6_DEFAULT_FLOW_LABEL 0 -#define IPV6_DEFAULT_PAYLOAD_LENGTH 0 +#define IPV6_DEFAULT_VERSION 6 +#define IPV6_DEFAULT_TRAFFIC_CLASS 0 +#define IPV6_DEFAULT_FLOW_LABEL 0 +#define IPV6_DEFAULT_PAYLOAD_LENGTH 0 #endif diff --git a/lib/includes/hicn/protocol/new.h b/lib/includes/hicn/protocol/new.h new file mode 100644 index 000000000..e688bef21 --- /dev/null +++ b/lib/includes/hicn/protocol/new.h @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2021 Cisco and/or its affiliates. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file protocol/ah.h + * @brief AH packet header + */ +#ifndef HICN_PROTOCOL_NEW_H +#define HICN_PROTOCOL_NEW_H + +#include "../common.h" +#include "../name.h" + +/* + * The length of the new header struct must be 28 bytes. + */ +#define EXPECTED_NEW_HDRLEN 32 + +typedef struct +{ + u8 version_reserved; + u8 flags; + u16 payload_length; + u32 lifetime; + hicn_ip_address_t prefix; + u32 suffix; + u32 path_label; +} _new_header_t; + +#define NEW_HDRLEN sizeof (_new_header_t) +static_assert (EXPECTED_NEW_HDRLEN == NEW_HDRLEN, + "Size of new_header Struct does not match its expected size."); + +/* TCP flags bit 0 first. */ +#define foreach_hicn_new_flag \ + _ (SIG) /**< Signature header after. */ \ + _ (MAN) /**< Payload type is manifest. */ \ + _ (INT) /**< Packet is interest. */ \ + _ (LST) /**< Last data. */ + +enum +{ +#define _(f) HICN_NEW_FLAG_BIT_##f, + foreach_hicn_new_flag +#undef _ + HICN_NEW_N_FLAG_BITS, +}; + +enum +{ +#define _(f) HICN_NEW_FLAG_##f = 1 << HICN_NEW_FLAG_BIT_##f, + foreach_hicn_new_flag +#undef _ +}; + +static inline int +_get_new_header_version (const _new_header_t *new_hdr) +{ + return ((new_hdr->version_reserved >> 4) & 0x0F); +} + +static inline void +_set_new_header_version (_new_header_t *new_hdr) +{ + new_hdr->version_reserved = (0x9 << 4) & 0xF0; +} + +#endif /* HICN_PROTOCOL_NEW_H */ + +/* + * fd.io coding-style-patch-verification: ON + * + * Local Variables: + * eval: (c-set-style "gnu") + * End: + */ diff --git a/lib/includes/hicn/protocol/tcp.h b/lib/includes/hicn/protocol/tcp.h index 347682299..1731f0c24 100644 --- a/lib/includes/hicn/protocol/tcp.h +++ b/lib/includes/hicn/protocol/tcp.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2019 Cisco and/or its affiliates. + * Copyright (c) 2021 Cisco and/or its affiliates. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: @@ -59,55 +59,55 @@ typedef struct #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ struct { - u16 reserved:4; - u16 doff:4; - u16 fin:1; - u16 syn:1; - u16 rst:1; - u16 psh:1; - u16 ack:1; - u16 urg:1; - u16 ece:1; - u16 cwr:1; + u16 reserved : 4; + u16 doff : 4; + u16 fin : 1; + u16 syn : 1; + u16 rst : 1; + u16 psh : 1; + u16 ack : 1; + u16 urg : 1; + u16 ece : 1; + u16 cwr : 1; }; struct - { /* __ denotes unchanged bitfields */ - u16 timescale:4; - u16 __doff:4; - u16 __fin:1; - u16 __syn:1; - u16 __rst:1; - u16 sig:1; - u16 __ack:1; - u16 man:1; - u16 id:1; - u16 __cwr:1; + { /* __ denotes unchanged bitfields */ + u16 timescale : 4; + u16 __doff : 4; + u16 __fin : 1; + u16 __syn : 1; + u16 __rst : 1; + u16 sig : 1; + u16 __ack : 1; + u16 man : 1; + u16 id : 1; + u16 __cwr : 1; }; #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ struct { - u16 doff:4; - u16 reserved:4; - u16 cwr:1; - u16 ece:1; - u16 urg:1; - u16 ack:1; - u16 psh:1; - u16 rst:1; - u16 syn:1; - u16 fin:1; + u16 doff : 4; + u16 reserved : 4; + u16 cwr : 1; + u16 ece : 1; + u16 urg : 1; + u16 ack : 1; + u16 psh : 1; + u16 rst : 1; + u16 syn : 1; + u16 fin : 1; }; struct { - u16 __doff:4; - u16 timescale:4; - u16 __cwr:1; - u16 id:1 u16 man:1; - u16 __ack:1; - u16 sig:1; - u16 __rst:1; - u16 __syn:1; - u16 __fin:1; + u16 __doff : 4; + u16 timescale : 4; + u16 __cwr : 1; + u16 id : 1 u16 man : 1; + u16 __ack : 1; + u16 sig : 1; + u16 __rst : 1; + u16 __syn : 1; + u16 __fin : 1; }; #endif }; @@ -124,20 +124,20 @@ typedef struct }; } _tcp_header_t; -#define TCP_HDRLEN sizeof(_tcp_header_t) +#define TCP_HDRLEN sizeof (_tcp_header_t) static_assert (EXPECTED_TCP_HDRLEN == TCP_HDRLEN, "Size of TCP struct does not match its expected size."); /* TCP flags bit 0 first. */ -#define foreach_tcp_flag \ - _ (FIN) /**< No more data from sender. */ \ - _ (SYN) /**< Synchronize sequence numbers. */ \ - _ (RST) /**< Reset the connection. */ \ - _ (PSH) /**< Push function. */ \ - _ (ACK) /**< Ack field significant. */ \ - _ (URG) /**< Urgent pointer field significant. */ \ - _ (ECE) /**< ECN-echo. Receiver got CE packet */ \ - _ (CWR) /**< Sender reduced congestion window */ +#define foreach_tcp_flag \ + _ (FIN) /**< No more data from sender. */ \ + _ (SYN) /**< Synchronize sequence numbers. */ \ + _ (RST) /**< Reset the connection. */ \ + _ (PSH) /**< Push function. */ \ + _ (ACK) /**< Ack field significant. */ \ + _ (URG) /**< Urgent pointer field significant. */ \ + _ (ECE) /**< ECN-echo. Receiver got CE packet */ \ + _ (CWR) /**< Sender reduced congestion window */ enum { diff --git a/lib/includes/hicn/protocol/udp.h b/lib/includes/hicn/protocol/udp.h index 75d1ea98c..0e0dddd2c 100644 --- a/lib/includes/hicn/protocol/udp.h +++ b/lib/includes/hicn/protocol/udp.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2019 Cisco and/or its affiliates. + * Copyright (c) 2021 Cisco and/or its affiliates. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: @@ -29,7 +29,7 @@ typedef struct u16 checksum; } _udp_header_t; -#define UDP_HDRLEN sizeof(_udp_header_t) +#define UDP_HDRLEN sizeof (_udp_header_t) static_assert (EXPECTED_UDP_HDRLEN == UDP_HDRLEN, "Size of UDP struct does not match its expected size."); |