summaryrefslogtreecommitdiffstats
path: root/src/cmake
AgeCommit message (Expand)AuthorFilesLines
2020-06-19build: add cmake dependency from test plugin to apiTom Seidenberg1-0/+3
2020-06-17build: cmake cross-compilation fixesDamjan Marion1-1/+1
2020-05-08build: various improvementsDamjan Marion4-5/+7
2020-04-30build: rework x86 CPU variantsDamjan Marion1-5/+9
2020-04-30build: support arch-specific compiling for Neoverse N1Lijian.Zhang1-0/+4
2020-04-29build: detect GNU Assembler AVX-512 bug and disable AVX-512 variants if neededDamjan Marion1-4/+24
2020-03-31vlib: move pci api types from vnet/pci to vlib/pciJakub Grajciar1-2/+1
2020-01-27crypto-ia32: add VAES support for AES-CBCDamjan Marion1-0/+1
2019-12-17build: export vapi generation in vpp-devOliver Giles4-10/+84
2019-11-14vcl: Handle newer Glibc (>2.28) where fcntl is actually fcntl64Carl Smith1-0/+9
2019-11-04build: install generated api enum and type headersDave Barach1-0/+2
2019-09-25api: split api generated filesOle Troan2-1/+3
2019-09-05build: fix unsupported CMake comparison operationjialv011-1/+1
2019-08-19build: fix vpp compilation failure on ThunderX2 and AmpJianlin Lv1-1/+1
2019-07-31build: Append build number for cpack packagesYohanPipereau1-31/+32
2019-07-25build: vppapigen search VPP_INCLUDE_DIR if setBenoît Ganne1-2/+8
2019-07-25build: package .api files in vpp-devBenoît Ganne1-1/+1
2019-06-07build: add -Wall and -fno-common, fix reported issuesBenoît Ganne3-3/+1
2019-05-14Build packages for generic Arm architectureLijian.Zhang1-0/+2
2019-03-28cmake: add vpp_plugin_find_library macroDamjan Marion1-0/+9
2019-03-18Fix build with newer linux headersDamjan Marion1-0/+10
2019-02-14Add -fno-common compile optionBenoît Ganne2-2/+2
2019-01-26cmake: add support for linking with DPDK shared libsDamjan Marion1-0/+13
2019-01-25cmake: execute git from src directoryDamjan Marion1-0/+1
2019-01-22cmake: don't set SONAME for pluginsDamjan Marion1-0/+2
2019-01-20Rework of debian packagingDamjan Marion1-2/+1
2019-01-17cmake: initial cross-compilation supportDamjan Marion1-1/+4
2018-11-30API: Add dependency on compiler for API .json and .api generation.Ole Troan1-2/+2
2018-10-01Support dynamic dual/quad loop selection on aarch64Lijian Zhang1-0/+16
2018-09-14cpack: add deb/rpm packaging to VPP moduleDamjan Marion5-19/+91
2018-09-14cmake: use VPP package in VOMDamjan Marion1-1/+3
2018-09-12cmake: create cmake VPP module, update sample-plugin so it uses itDamjan Marion4-8/+83
2018-09-12Always use 'lib' instead of 'lib64'Damjan Marion3-7/+3
2018-09-07cmake: set packaging component for different filesDamjan Marion3-10/+18
2018-09-07Cavium OcteonTX: cache line fixMarco Varlese1-5/+9
2018-09-07cmake: Fix compilation for OCTEONTxNitin Saxena1-5/+5
2018-09-02cmake: cache line size detectionDamjan Marion1-0/+35
2018-09-01cmake: respect TERMDamjan Marion1-8/+11
2018-08-31cmake: detect vpp version, set soversion, pretty config printDamjan Marion2-0/+16
2018-08-30cmake: a bit of packaging workDamjan Marion3-18/+52
2018-08-28cmake: don't install some test executableDamjan Marion1-2/+4
2018-08-28cmake: compile libs and plugins with -WallDamjan Marion2-0/+2
2018-08-27cmake: Fix plugins .h includesMohsin Kazmi1-1/+10
2018-08-27cmake: fix clang build and few minor fixesDamjan Marion1-4/+4
2018-08-27cmake: add vapi buildDamjan Marion3-5/+10
2018-08-27cmake: use lib64 for lib dirDamjan Marion3-3/+7
2018-08-26cmake: add add_vpp_library and add_vpp_executable macrosDamjan Marion2-0/+98
2018-08-26cmake: move functions to src/cmakeDamjan Marion7-0/+282
n class="o">: result += 7; goto done; case 0xfc: result += 6; goto done; case 0xf8: result += 5; goto done; case 0xf0: result += 4; goto done; case 0xe0: result += 3; goto done; case 0xc0: result += 2; goto done; case 0x80: result += 1; goto done; case 0x00: result += 0; goto done; default: /* Not a valid netmask mask. */ return ~0; } } done: return result; } typedef union { struct { /* 4 bit packet length (in 32bit units) and version VVVVLLLL. e.g. for packets w/ no options ip_version_and_header_length == 0x45. */ u8 ip_version_and_header_length; /* Type of service. */ ip_dscp_t tos; /* Total layer 3 packet length including this header. */ u16 length; /* Fragmentation ID. */ u16 fragment_id; /* 3 bits of flags and 13 bits of fragment offset (in units of 8 byte quantities). */ u16 flags_and_fragment_offset; #define IP4_HEADER_FLAG_MORE_FRAGMENTS (1 << 13) #define IP4_HEADER_FLAG_DONT_FRAGMENT (1 << 14) #define IP4_HEADER_FLAG_CONGESTION (1 << 15) /* Time to live decremented by router at each hop. */ u8 ttl; /* Next level protocol packet. */ u8 protocol; /* Checksum. */ u16 checksum; /* Source and destination address. */ union { struct { ip4_address_t src_address, dst_address; }; ip4_address_pair_t address_pair; }; }; /* For checksumming we'll want to access IP header in word sized chunks. */ /* For 64 bit machines. */ /* *INDENT-OFF* */ CLIB_PACKED (struct { u64 checksum_data_64[2]; u32 checksum_data_64_32[1]; }); /* *INDENT-ON* */ /* For 32 bit machines. */ /* *INDENT-OFF* */ CLIB_PACKED (struct { u32 checksum_data_32[5]; }); /* *INDENT-ON* */ } ip4_header_t; /* Value of ip_version_and_header_length for packets w/o options. */ #define IP4_VERSION_AND_HEADER_LENGTH_NO_OPTIONS \ ((4 << 4) | (sizeof (ip4_header_t) / sizeof (u32))) #define IP4_ROUTER_ALERT_OPTION 20 always_inline int ip4_get_fragment_offset (const ip4_header_t * i) { return clib_net_to_host_u16 (i->flags_and_fragment_offset) & 0x1fff; } always_inline int ip4_get_fragment_more (const ip4_header_t * i) { return clib_net_to_host_u16 (i->flags_and_fragment_offset) & IP4_HEADER_FLAG_MORE_FRAGMENTS; } always_inline int ip4_is_fragment (const ip4_header_t * i) { return (i->flags_and_fragment_offset & clib_net_to_host_u16 (0x1fff | IP4_HEADER_FLAG_MORE_FRAGMENTS)); } always_inline int ip4_is_first_fragment (const ip4_header_t * i) { return (i->flags_and_fragment_offset & clib_net_to_host_u16 (0x1fff | IP4_HEADER_FLAG_MORE_FRAGMENTS)) == clib_net_to_host_u16 (IP4_HEADER_FLAG_MORE_FRAGMENTS); } /* Fragment offset in bytes. */ always_inline int ip4_get_fragment_offset_bytes (const ip4_header_t * i) { return 8 * ip4_get_fragment_offset (i); } always_inline int ip4_header_bytes (const ip4_header_t * i) { return sizeof (u32) * (i->ip_version_and_header_length & 0xf); } always_inline void * ip4_next_header (ip4_header_t * i) { return (void *) i + ip4_header_bytes (i); } always_inline u16 ip4_header_checksum (ip4_header_t * i) { u16 save, csum; ip_csum_t sum; save = i->checksum; i->checksum = 0; sum = ip_incremental_checksum (0, i, ip4_header_bytes (i)); csum = ~ip_csum_fold (sum); i->checksum = save; /* Make checksum agree for special case where either 0 or 0xffff would give same 1s complement sum. */ if (csum == 0 && save == 0xffff) csum = save; return csum; } static inline uword ip4_header_checksum_is_valid (ip4_header_t * i) { return i->checksum == ip4_header_checksum (i); } #define ip4_partial_header_checksum_x1(ip0,sum0) \ do { \ if (BITS (ip_csum_t) > 32) \ { \ sum0 = ip0->checksum_data_64[0]; \ sum0 = ip_csum_with_carry (sum0, ip0->checksum_data_64[1]); \ sum0 = ip_csum_with_carry (sum0, ip0->checksum_data_64_32[0]); \ } \ else \ { \ sum0 = ip0->checksum_data_32[0]; \ sum0 = ip_csum_with_carry (sum0, ip0->checksum_data_32[1]); \ sum0 = ip_csum_with_carry (sum0, ip0->checksum_data_32[2]); \ sum0 = ip_csum_with_carry (sum0, ip0->checksum_data_32[3]); \ sum0 = ip_csum_with_carry (sum0, ip0->checksum_data_32[4]); \ } \ } while (0) #define ip4_partial_header_checksum_x2(ip0,ip1,sum0,sum1) \ do { \ if (BITS (ip_csum_t) > 32) \ { \ sum0 = ip0->checksum_data_64[0]; \ sum1 = ip1->checksum_data_64[0]; \ sum0 = ip_csum_with_carry (sum0, ip0->checksum_data_64[1]); \ sum1 = ip_csum_with_carry (sum1, ip1->checksum_data_64[1]); \ sum0 = ip_csum_with_carry (sum0, ip0->checksum_data_64_32[0]); \ sum1 = ip_csum_with_carry (sum1, ip1->checksum_data_64_32[0]); \ } \ else \ { \ sum0 = ip0->checksum_data_32[0]; \ sum1 = ip1->checksum_data_32[0]; \ sum0 = ip_csum_with_carry (sum0, ip0->checksum_data_32[1]); \ sum1 = ip_csum_with_carry (sum1, ip1->checksum_data_32[1]); \ sum0 = ip_csum_with_carry (sum0, ip0->checksum_data_32[2]); \ sum1 = ip_csum_with_carry (sum1, ip1->checksum_data_32[2]); \ sum0 = ip_csum_with_carry (sum0, ip0->checksum_data_32[3]); \ sum1 = ip_csum_with_carry (sum1, ip1->checksum_data_32[3]); \ sum0 = ip_csum_with_carry (sum0, ip0->checksum_data_32[4]); \ sum1 = ip_csum_with_carry (sum1, ip1->checksum_data_32[4]); \ } \ } while (0) always_inline uword ip4_address_is_multicast (const ip4_address_t * a) { return (a->data[0] & 0xf0) == 0xe0; } always_inline void ip4_multicast_address_set_for_group (ip4_address_t * a, ip_multicast_group_t g) { ASSERT ((u32) g < (1 << 28)); a->as_u32 = clib_host_to_net_u32 ((0xe << 28) + g); } always_inline void ip4_multicast_ethernet_address (u8 * ethernet_address, const ip4_address_t * a) { const u8 *d = a->as_u8; ethernet_address[0] = 0x01; ethernet_address[1] = 0x00; ethernet_address[2] = 0x5e; ethernet_address[3] = d[1] & 0x7f; ethernet_address[4] = d[2]; ethernet_address[5] = d[3]; } always_inline void ip4_tcp_reply_x1 (ip4_header_t * ip0, tcp_header_t * tcp0) { u32 src0, dst0; src0 = ip0->src_address.data_u32; dst0 = ip0->dst_address.data_u32; ip0->src_address.data_u32 = dst0; ip0->dst_address.data_u32 = src0; src0 = tcp0->src; dst0 = tcp0->dst; tcp0->src = dst0; tcp0->dst = src0; } always_inline void ip4_tcp_reply_x2 (ip4_header_t * ip0, ip4_header_t * ip1, tcp_header_t * tcp0, tcp_header_t * tcp1) { u32 src0, dst0, src1, dst1; src0 = ip0->src_address.data_u32; src1 = ip1->src_address.data_u32; dst0 = ip0->dst_address.data_u32; dst1 = ip1->dst_address.data_u32; ip0->src_address.data_u32 = dst0; ip1->src_address.data_u32 = dst1; ip0->dst_address.data_u32 = src0; ip1->dst_address.data_u32 = src1; src0 = tcp0->src; src1 = tcp1->src; dst0 = tcp0->dst; dst1 = tcp1->dst; tcp0->src = dst0; tcp1->src = dst1; tcp0->dst = src0; tcp1->dst = src1; } #endif /* included_ip4_packet_h */ /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */