AUTOMAKE_OPTIONS = foreign subdir-objects
-AM_CFLAGS = -Wall @DPDK@ @VIRL@ @IPSEC@ @VCGN@ @IPV6SR@
+AM_CFLAGS = -Wall -Werror @DPDK@ @DPDK_CRYPTO@ @IPSEC@ @IPV6SR@
+
+BUILT_SOURCES = \
+ vnet/interface.api.h \
+ vnet/interface.api.json \
+ vnet/l2/l2.api.h \
+ vnet/l2/l2.api.json \
+ vnet/map/map.api.h \
+ vnet/map/map.api.json
libvnet_la_SOURCES =
libvnetplugin_la_SOURCES =
noinst_PROGRAMS =
TESTS =
+dpdk_libs =
+if WITH_DPDK
+dpdk_libs += -l:libdpdk.a
+endif
+
########################################
# Generic stuff
########################################
libvnet_la_SOURCES += \
vnet/config.c \
+ vnet/devices/devices.c \
vnet/handoff.c \
vnet/interface.c \
+ vnet/interface_api.c \
vnet/interface_cli.c \
vnet/interface_format.c \
vnet/interface_output.c \
vnet/api_errno.h \
vnet/buffer.h \
vnet/config.h \
+ vnet/devices/devices.h \
vnet/global_funcs.h \
vnet/handoff.h \
vnet/interface.h \
+ vnet/interface.api.h \
vnet/interface_funcs.h \
vnet/l3_types.h \
vnet/pipeline.h \
vnet/replication.h \
vnet/rewrite.h \
- vnet/vnet.h
+ vnet/vnet.h \
+ vnet/vnet_all_api_h.h \
+ vnet/vnet_msg_enum.h
########################################
# Policer infra
nobase_include_HEADERS += \
vnet/policer/police.h \
vnet/policer/policer.h \
- vnet/policer/fix_types.h \
vnet/policer/xlate.h
########################################
########################################
libvnet_la_SOURCES += \
vnet/l2/feat_bitmap.c \
+ vnet/l2/l2_api.c \
vnet/l2/l2_bd.c \
vnet/l2/l2_bvi.c \
- vnet/l2/l2_classify.c \
+ vnet/l2/l2_input_classify.c \
+ vnet/l2/l2_output_classify.c \
vnet/l2/l2_efp_filter.c \
vnet/l2/l2_fib.c \
vnet/l2/l2_flood.c \
vnet/l2/l2_fib.h \
vnet/l2/l2_rw.h \
vnet/l2/l2_xcrw.h \
- vnet/l2/l2_classify.h
+ vnet/l2/l2_classify.h \
+ vnet/l2/l2.api.h
########################################
# Layer 2 protocol: SRP
nobase_include_HEADERS += \
vnet/cdp/cdp_protocol.h
+########################################
+# Layer 2 / LLDP
+########################################
+libvnet_la_SOURCES += \
+ vnet/lldp/lldp_input.c \
+ vnet/lldp/lldp_node.c \
+ vnet/lldp/lldp_output.c \
+ vnet/lldp/lldp_cli.c
+
+nobase_include_HEADERS += \
+ vnet/lldp/lldp_protocol.h
+
########################################
# Layer 2/3 "classify"
########################################
vnet/classify/vnet_classify.c \
vnet/classify/ip_classify.c \
vnet/classify/input_acl.c \
+ vnet/classify/policer_classify.c \
+ vnet/classify/flow_classify.c \
+ vnet/classify/flow_classify_node.c \
vnet/classify/vnet_classify.h
nobase_include_HEADERS += \
vnet/classify/vnet_classify.h \
- vnet/classify/input_acl.h
+ vnet/classify/input_acl.h \
+ vnet/classify/policer_classify.h \
+ vnet/classify/flow_classify.h
########################################
# Layer 3 protocols go here
# Layer 3 protocol: IP v4/v6
########################################
libvnet_la_SOURCES += \
- vnet/ip/adj_alloc.c \
vnet/ip/format.c \
vnet/ip/icmp4.c \
vnet/ip/icmp6.c \
vnet/ip/ip4_input.c \
vnet/ip/ip4_mtrie.c \
vnet/ip/ip4_pg.c \
+ vnet/ip/ip4_source_and_port_range_check.c \
vnet/ip/ip4_source_check.c \
vnet/ip/ip6_format.c \
vnet/ip/ip6_forward.c \
vnet/ip/ip6_neighbor.c \
vnet/ip/ip6_pg.c \
vnet/ip/ip_checksum.c \
+ vnet/ip/ip_frag.c \
vnet/ip/ip.h \
vnet/ip/ip_init.c \
+ vnet/ip/ip_input_acl.c \
vnet/ip/lookup.c \
+ vnet/ip/ping.c \
+ vnet/ip/punt.c \
vnet/ip/udp_format.c \
vnet/ip/udp_init.c \
vnet/ip/udp_local.c \
- vnet/ip/udp_pg.c \
- vnet/ip/ip_input_acl.c \
- vnet/ip/ip_frag.c
+ vnet/ip/udp_pg.c
nobase_include_HEADERS += \
- vnet/ip/adj_alloc.h \
vnet/ip/format.h \
vnet/ip/icmp46_packet.h \
vnet/ip/icmp4.h \
vnet/ip/icmp6.h \
vnet/ip/igmp_packet.h \
- vnet/ip/ip.h \
+ vnet/ip/ip4_error.h \
vnet/ip/ip4.h \
vnet/ip/ip4_mtrie.h \
- vnet/ip/ip4_error.h \
vnet/ip/ip4_packet.h \
- vnet/ip/ip6.h \
vnet/ip/ip6_error.h \
+ vnet/ip/ip6.h \
vnet/ip/ip6_hop_by_hop.h \
vnet/ip/ip6_hop_by_hop_packet.h \
vnet/ip/ip6_packet.h \
- vnet/ip/lookup.h \
+ vnet/ip/ip6_neighbor.h \
+ vnet/ip/ip.h \
vnet/ip/ip_packet.h \
+ vnet/ip/ip_source_and_port_range_check.h \
+ vnet/ip/lookup.h \
vnet/ip/ports.def \
vnet/ip/protocols.def \
+ vnet/ip/punt_error.def \
+ vnet/ip/punt.h \
vnet/ip/tcp_packet.h \
- vnet/ip/udp.h \
vnet/ip/udp_error.def \
+ vnet/ip/udp.h \
vnet/ip/udp_packet.h
########################################
vnet/ipsec/ikev2_cli.c \
vnet/ipsec/ikev2_payload.c \
vnet/ipsec/ikev2_format.c
-endif
+if WITH_DPDK_CRYPTO
+libvnet_la_SOURCES += \
+ vnet/devices/dpdk/ipsec/esp_encrypt.c \
+ vnet/devices/dpdk/ipsec/esp_decrypt.c \
+ vnet/devices/dpdk/ipsec/crypto_node.c \
+ vnet/devices/dpdk/ipsec/cli.c \
+ vnet/devices/dpdk/ipsec/ipsec.c
+endif
+endif
libvnet_la_SOURCES += \
vnet/ipsec/ipsec_output.c
vnet/ipsec/esp.h \
vnet/ipsec/ikev2.h \
vnet/ipsec/ikev2_priv.h
+if WITH_DPDK_CRYPTO
+nobase_include_HEADERS += \
+ vnet/devices/dpdk/ipsec/ipsec.h \
+ vnet/devices/dpdk/ipsec/esp.h
+endif
########################################
# Layer 3 protocol: osi
########################################
# Layer 3 protocol: MAP
########################################
-libvnet_la_SOURCES += \
- vnet/map/map.c \
- vnet/map/ip4_map.c \
- vnet/map/ip6_map.c \
- vnet/map/ip4_map_t.c \
- vnet/map/ip6_map_t.c
+libvnet_la_SOURCES += \
+ vnet/map/map.c \
+ vnet/map/map_dpo.c \
+ vnet/map/ip4_map.c \
+ vnet/map/ip6_map.c \
+ vnet/map/ip4_map_t.c \
+ vnet/map/ip6_map_t.c \
+ vnet/map/map_api.c
+
+nobase_include_HEADERS += \
+ vnet/map/map.h \
+ vnet/map/map_dpo.h \
+ vnet/map/map.api.h
+
+if ENABLE_TESTS
+TESTS += test_map
+test_map_SOURCES = \
+ vnet/map/test.c
+test_map_CPPFLAGS = $(AM_CPPFLAGS) -DCLIB_DEBUG
+
+test_map_LDADD = libvnet.la -lvppinfra -lvlib \
+ -lpthread -lvlibmemory -lvlibapi -lvlib_unix \
+ -ldl -lsvm -lrt
+
+test_map_LDFLAGS = -static
+endif
-nobase_include_HEADERS += \
- vnet/map/map.h
########################################
# Tunnel protocol: gre
# Tunnel protocol: gre+mpls
########################################
libvnet_la_SOURCES += \
- vnet/mpls-gre/mpls.c \
- vnet/mpls-gre/node.c \
- vnet/mpls-gre/interface.c \
- vnet/mpls-gre/policy_encap.c \
- vnet/mpls-gre/pg.c
+ vnet/mpls/mpls.c \
+ vnet/mpls/mpls_lookup.c \
+ vnet/mpls/mpls_output.c \
+ vnet/mpls/mpls_features.c \
+ vnet/mpls/node.c \
+ vnet/mpls/interface.c \
+ vnet/mpls/mpls_tunnel.c \
+ vnet/mpls/pg.c
nobase_include_HEADERS += \
- vnet/mpls-gre/mpls.h \
- vnet/mpls-gre/packet.h \
- vnet/mpls-gre/error.def
+ vnet/mpls/mpls.h \
+ vnet/mpls/mpls_types.h \
+ vnet/mpls/mpls_tunnel.h \
+ vnet/mpls/packet.h \
+ vnet/mpls/error.def
########################################
vnet/vxlan-gpe/vxlan_gpe_packet.h \
vnet/vxlan-gpe/vxlan_gpe_error.def
+########################################
+# Tunnel protocol: ipsec+gre
+########################################
+libvnet_la_SOURCES += \
+ vnet/ipsec-gre/ipsec_gre.c \
+ vnet/ipsec-gre/node.c \
+ vnet/ipsec-gre/interface.c
+
+nobase_include_HEADERS += \
+ vnet/ipsec-gre/ipsec_gre.h \
+ vnet/ipsec-gre/error.def
+
########################################
# LISP control plane: lisp-cp
########################################
libvnet_la_SOURCES += \
vnet/lisp-cp/lisp_types.c \
+ vnet/lisp-cp/lisp_cp_dpo.c \
vnet/lisp-cp/control.c \
vnet/lisp-cp/gid_dictionary.c \
vnet/lisp-cp/lisp_msg_serdes.c \
if ENABLE_TESTS
-LDS = -lvppinfra -l:libvlib.a -l:libdpdk.a -l:libvlibmemory.a \
+LDS = -lvppinfra -l:libvlib.a $(dpdk_libs) -l:libvlibmemory.a \
-l:libvlibapi.a -l:libsvm.a -lpthread -ldl -lrt -lm -l:libvlib_unix.a
TESTS += test_cp_serdes test_lisp_types
libvnet_la_SOURCES += \
vnet/lisp-gpe/lisp_gpe.c \
+ vnet/lisp-gpe/lisp_gpe_sub_interface.c \
+ vnet/lisp-gpe/lisp_gpe_adjacency.c \
+ vnet/lisp-gpe/lisp_gpe_tunnel.c \
+ vnet/lisp-gpe/lisp_gpe_fwd_entry.c \
+ vnet/lisp-gpe/lisp_gpe_tenant.c \
vnet/lisp-gpe/interface.c \
- vnet/lisp-gpe/ip_forward.c \
vnet/lisp-gpe/decap.c
nobase_include_HEADERS += \
vnet/lisp-gpe/lisp_gpe.h \
+ vnet/lisp-gpe/lisp_gpe_fwd_entry.h \
+ vnet/lisp-gpe/lisp_gpe_tenant.h \
vnet/lisp-gpe/lisp_gpe_packet.h \
vnet/lisp-gpe/lisp_gpe_error.def
vnet/sr/sr_error.def \
vnet/sr/sr.h
-########################################
-# CGN
-#########################################
-
-if WITH_VCGN
-libvnet_la_SOURCES += \
- vnet/vcgn/cnat_bulk_port.c \
- vnet/vcgn/cnat_config.c \
- vnet/vcgn/cnat_db_scanner.c \
- vnet/vcgn/cnat_db_v2.c \
- vnet/vcgn/cnat_debug_msg_handler.c \
- vnet/vcgn/cnat_cli_handler.c \
- vnet/vcgn/cnat_global.c \
- vnet/vcgn/cnat_ipv4_udp_inside_input.c \
- vnet/vcgn/cnat_ipv4_udp_inside_input_exceptions.c \
- vnet/vcgn/cnat_ipv4_udp_outside_input.c \
- vnet/vcgn/cnat_ipv4_tcp_inside_input.c \
- vnet/vcgn/cnat_ipv4_tcp_inside_input_exceptions.c \
- vnet/vcgn/cnat_ipv4_tcp_outside_input.c \
- vnet/vcgn/cnat_ipv4_icmp_query_inside_input.c \
- vnet/vcgn/cnat_ipv4_icmp_query_inside_input_exception.c \
- vnet/vcgn/cnat_ipv4_icmp_query_outside_input.c \
- vnet/vcgn/cnat_ipv4_icmp_error_inside_input.c \
- vnet/vcgn/cnat_ipv4_icmp_error_outside_input.c \
- vnet/vcgn/cnat_logging.c \
- vnet/vcgn/cnat_ports.c \
- vnet/vcgn/cnat_util.c \
- vnet/vcgn/cnat_show.c \
- vnet/vcgn/cnat_syslog.c \
- vnet/vcgn/cnat_v4_functions.c \
- vnet/vcgn/index_list.c \
- vnet/vcgn/spp_platform_trace_log.c \
- vnet/vcgn/vcgn_classify.c
-endif
-
########################################
# DHCPv6 proxy
########################################
vnet/flow/ipfix_packet.h
########################################
-# IPFIX sample code
+# IPFIX classify code
########################################
libvnet_la_SOURCES += \
- vnet/flow/flow_report_sample.c
+ vnet/flow/flow_report_classify.c
nobase_include_HEADERS += \
- vnet/flow/flow_report_sample.h
+ vnet/flow/flow_report_classify.h
########################################
# lawful intercept
vnet/lawful-intercept/node.c
nobase_include_HEADERS += \
- vnet/dpdk_replication.h \
vnet/lawful-intercept/lawful_intercept.h
+########################################
+# SPAN (port mirroring)
+########################################
+
+libvnet_la_SOURCES += \
+ vnet/span/span.c \
+ vnet/span/node.c
+
+nobase_include_HEADERS += \
+ vnet/span/span.h
+
########################################
# Packet generator
########################################
vnet/pg/edit.h
########################################
-# Intel DPDK
+# DPDK
########################################
if WITH_DPDK
libvnet_la_SOURCES += \
vnet/devices/dpdk/format.c \
vnet/devices/dpdk/init.c \
vnet/devices/dpdk/node.c \
- vnet/devices/dpdk/threads.c \
- vnet/devices/dpdk/vhost_user.c \
+ vnet/devices/dpdk/hqos.c \
vnet/devices/dpdk/cli.c
nobase_include_HEADERS += \
- vnet/devices/dpdk/dpdk.h \
- vnet/devices/dpdk/threads.h
+ vnet/devices/dpdk/dpdk.h
else
libvnet_la_SOURCES += \
vnet/devices/nic/ixge.c \
# virtio
########################################
-if WITH_DPDK
libvnet_la_SOURCES += \
vnet/devices/virtio/vhost-user.c
nobase_include_HEADERS += \
vnet/devices/virtio/vhost-user.h
-endif WITH_DPDK
########################################
# ssvm ethernet
vnet/devices/netmap/netmap.h
+########################################
+# Driver feature graph arc support
+########################################
+
+libvnet_la_SOURCES += \
+ vnet/feature/feature.c \
+ vnet/feature/registration.c
+
+nobase_include_HEADERS += \
+ vnet/feature/feature.h
+
########################################
# Unix kernel related
########################################
vnet/unix/tapcli.h
########################################
-# Plugin client library
+# FIB
########################################
-libvnetplugin_la_SOURCES += \
- vnet/plugin/p1.c
+libvnet_la_SOURCES += \
+ vnet/fib/fib.c \
+ vnet/fib/fib_test.c \
+ vnet/fib/ip4_fib.c \
+ vnet/fib/ip6_fib.c \
+ vnet/fib/mpls_fib.c \
+ vnet/fib/fib_table.c \
+ vnet/fib/fib_walk.c \
+ vnet/fib/fib_types.c \
+ vnet/fib/fib_node.c \
+ vnet/fib/fib_node_list.c \
+ vnet/fib/fib_entry.c \
+ vnet/fib/fib_entry_src.c \
+ vnet/fib/fib_entry_src_rr.c \
+ vnet/fib/fib_entry_src_interface.c \
+ vnet/fib/fib_entry_src_default_route.c \
+ vnet/fib/fib_entry_src_special.c \
+ vnet/fib/fib_entry_src_api.c \
+ vnet/fib/fib_entry_src_adj.c \
+ vnet/fib/fib_entry_src_mpls.c \
+ vnet/fib/fib_entry_src_lisp.c \
+ vnet/fib/fib_entry_cover.c \
+ vnet/fib/fib_entry_delegate.c \
+ vnet/fib/fib_path_list.c \
+ vnet/fib/fib_path.c \
+ vnet/fib/fib_path_ext.c \
+ vnet/fib/fib_urpf_list.c \
+ vnet/fib/fib_attached_export.c
-nobase_include_HEADERS += \
- vnet/plugin/plugin.h
+nobase_include_HEADERS += \
+ vnet/fib/fib.h \
+ vnet/fib/ip4_fib.h \
+ vnet/fib/ip6_fib.h \
+ vnet/fib/fib_types.h \
+ vnet/fib/fib_table.h \
+ vnet/fib/fib_node.h \
+ vnet/fib/fib_node_list.h \
+ vnet/fib/fib_entry.h \
+ vnet/fib/fib_entry_delegate.h
########################################
-# Service Chain verification util
+# ADJ
########################################
-libvnet_la_SOURCES += \
- vnet/lib-scv/scv_util.c
-nobase_include_HEADERS += \
- vnet/lib-scv/scv_util.h \
- vnet/lib-scv/math64.h
+libvnet_la_SOURCES += \
+ vnet/adj/adj_nbr.c \
+ vnet/adj/adj_rewrite.c \
+ vnet/adj/adj_glean.c \
+ vnet/adj/adj_midchain.c \
+ vnet/adj/adj_l2.c \
+ vnet/adj/adj.c
-lib_LTLIBRARIES = libvnet.la libvnetplugin.la
+nobase_include_HEADERS += \
+ vnet/adj/adj.h \
+ vnet/adj/adj_types.h \
+ vnet/adj/adj_rewrite.h \
+ vnet/adj/adj_glean.h \
+ vnet/adj/adj_nbr.h
-dpdk_libs =
+########################################
+# Data-Plane Objects
+########################################
-if WITH_DPDK
-dpdk_libs += -l:libdpdk.a
-endif
+libvnet_la_SOURCES += \
+ vnet/dpo/dpo.c \
+ vnet/dpo/drop_dpo.c \
+ vnet/dpo/ip_null_dpo.c \
+ vnet/dpo/punt_dpo.c \
+ vnet/dpo/receive_dpo.c \
+ vnet/dpo/load_balance.c \
+ vnet/dpo/load_balance_map.c \
+ vnet/dpo/lookup_dpo.c \
+ vnet/dpo/classify_dpo.c \
+ vnet/dpo/mpls_label_dpo.c
+
+nobase_include_HEADERS += \
+ vnet/dpo/load_balance.h \
+ vnet/dpo/drop_dpo.h \
+ vnet/dpo/lookup_dpo.h \
+ vnet/dpo/punt_dpo.h \
+ vnet/dpo/classify_dpo.h \
+ vnet/dpo/receive_dpo.h \
+ vnet/dpo/ip_null_dpo.h \
+ vnet/dpo/dpo.h
+
+########################################
+# Plugin client library
+########################################
+
+libvnetplugin_la_SOURCES += \
+ vnet/plugin/p1.c
+
+nobase_include_HEADERS += \
+ vnet/plugin/plugin.h
+
+lib_LTLIBRARIES = libvnet.la libvnetplugin.la
pcap2pg_SOURCES = \
vnet/unix/pcap2pg.c \
noinst_PROGRAMS += pcap2pg
+# Set the suffix list
+SUFFIXES = .api.h .api .api.json
+
+# install the API definition, so we can produce java bindings, etc.
+
+apidir = $(prefix)/vnet
+api_DATA = \
+ vnet/interface.api.json \
+ vnet/l2/l2.api.json \
+ vnet/map/map.api.json
+
+# The actual %.api.h rule is in .../build-data/packages/suffix-rules.mk
+# and requires a symbolic link at the top of the vnet source tree
+include $(top_srcdir)/suffix-rules.mk