API refactoring : vhost_user
[vpp.git] / vnet / Makefile.am
index 5fdffca..e871b1c 100644 (file)
 
 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/devices/af_packet/af_packet.api.h                \
+ vnet/devices/af_packet/af_packet.api.json     \
+ vnet/devices/netmap/netmap.api.h              \
+ vnet/devices/netmap/netmap.api.json           \
+ vnet/devices/virtio/vhost_user.api.h          \
+ vnet/devices/virtio/vhost_user.api.json       \
+ vnet/interface.api.h                          \
+ vnet/interface.api.json                       \
+ vnet/ip/ip.api.h                              \
+ vnet/ip/ip.api.json                           \
+ vnet/l2/l2.api.h                              \
+ vnet/l2/l2.api.json                           \
+ vnet/map/map.api.h                            \
+ vnet/map/map.api.json                         \
+ vnet/span/span.api.h                          \
+ vnet/span/span.api.json                       \
+ vnet/unix/tap.api.h                           \
+ vnet/unix/tap.api.json                                \
+ vnet/vxlan/vxlan.api.h                                \
+ vnet/vxlan/vxlan.api.json
 
 libvnet_la_SOURCES =
 libvnetplugin_la_SOURCES =
@@ -21,12 +43,20 @@ nobase_include_HEADERS =
 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                              \
@@ -38,14 +68,19 @@ nobase_include_HEADERS +=                   \
   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
@@ -58,6 +93,7 @@ libvnet_la_SOURCES +=                         \
 
 nobase_include_HEADERS +=                      \
   vnet/policer/police.h                                \
+  vnet/policer/policer.h                       \
   vnet/policer/xlate.h
 
 ########################################
@@ -100,9 +136,11 @@ nobase_include_HEADERS +=                  \
 ########################################
 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                            \
@@ -132,7 +170,8 @@ nobase_include_HEADERS +=                   \
  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
@@ -201,12 +240,14 @@ nobase_include_HEADERS +=                 \
 libvnet_la_SOURCES +=                          \
   vnet/vxlan/vxlan.c                           \
   vnet/vxlan/encap.c                           \
-  vnet/vxlan/decap.c   
+  vnet/vxlan/decap.c                \
+  vnet/vxlan/vxlan_api.c       
 
 nobase_include_HEADERS +=                      \
   vnet/vxlan/vxlan.h                           \
   vnet/vxlan/vxlan_packet.h                    \
-  vnet/vxlan/vxlan_error.def
+  vnet/vxlan/vxlan_error.def        \
+  vnet/vxlan/vxlan.api.h
 
 ########################################
 # Layer 2 / CDP
@@ -219,6 +260,18 @@ libvnet_la_SOURCES +=                              \
 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"
 ########################################
@@ -226,11 +279,16 @@ libvnet_la_SOURCES +=                             \
   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
@@ -240,17 +298,16 @@ nobase_include_HEADERS +=                 \
 # 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/ip46_cli.c                            \
  vnet/ip/ip4_format.c                          \
  vnet/ip/ip4_forward.c                         \
- vnet/ip/ip4_hop_by_hop.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                         \
@@ -258,43 +315,66 @@ libvnet_la_SOURCES +=                             \
  vnet/ip/ip6_input.c                           \
  vnet/ip/ip6_neighbor.c                                \
  vnet/ip/ip6_pg.c                              \
+ vnet/ip/ip_api.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/ip.api.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
 
+########################################
+# Bidirectional Forwarding Detection
+########################################
+
+nobase_include_HEADERS +=                       \
+ vnet/bfd/bfd_protocol.h                       \
+ vnet/bfd/bfd_main.h                            \
+ vnet/bfd/bfd_api.h                            \
+ vnet/bfd/bfd_udp.h
+
+libvnet_la_SOURCES +=                          \
+ vnet/bfd/bfd_api.h                            \
+ vnet/bfd/bfd_udp.c                             \
+ vnet/bfd/bfd_main.c                            \
+ vnet/bfd/bfd_protocol.c
+
 ########################################
 # Layer 3 protocol: IPSec
 ########################################
@@ -314,7 +394,15 @@ libvnet_la_SOURCES +=                              \
  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
@@ -324,6 +412,11 @@ nobase_include_HEADERS +=                          \
  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
@@ -339,19 +432,33 @@ nobase_include_HEADERS +=                 \
 ########################################
 # Layer 3 protocol: MAP
 ########################################
-libvnet_la_SOURCES +=                           \
- vnet/map/map.c                                 \
- vnet/map/ip4_map.c                             \
- vnet/map/ip6_map.c                             \
- vnet/map/sixrd.c                               \
- vnet/map/ip4_sixrd.c                           \
- vnet/map/ip6_sixrd.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                                 \
- vnet/map/sixrd.h
 
 ########################################
 # Tunnel protocol: gre
@@ -384,45 +491,48 @@ nobase_include_HEADERS +=                 \
 # 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
 
 
 ########################################
-# Tunnel protocol: nsh-gre
+# Tunnel protocol: vxlan-gpe
 ########################################
 
 libvnet_la_SOURCES +=                          \
- vnet/nsh-gre/nsh_gre.c                                \
- vnet/nsh-gre/encap.c                          \
- vnet/nsh-gre/decap.c
+ vnet/vxlan-gpe/vxlan_gpe.c                    \
+ vnet/vxlan-gpe/encap.c                                \
+ vnet/vxlan-gpe/decap.c
 
 nobase_include_HEADERS +=                      \
- vnet/nsh-gre/nsh_gre.h                                \
- vnet/nsh-gre/nsh_gre_packet.h                 \
- vnet/nsh-gre/nsh_gre_error.def
+ vnet/vxlan-gpe/vxlan_gpe.h                    \
+ vnet/vxlan-gpe/vxlan_gpe_packet.h             \
+ vnet/vxlan-gpe/vxlan_gpe_error.def
 
 ########################################
-# Tunnel protocol: nsh-vxlan-gpe
+# Tunnel protocol: ipsec+gre
 ########################################
-
 libvnet_la_SOURCES +=                          \
- vnet/nsh-vxlan-gpe/nsh_vxlan_gpe.c            \
- vnet/nsh-vxlan-gpe/encap.c                    \
- vnet/nsh-vxlan-gpe/decap.c
+ vnet/ipsec-gre/ipsec_gre.c                    \
+ vnet/ipsec-gre/node.c                         \
+ vnet/ipsec-gre/interface.c
 
 nobase_include_HEADERS +=                      \
- vnet/nsh-vxlan-gpe/nsh_vxlan_gpe.h            \
- vnet/nsh-vxlan-gpe/vxlan_gpe_packet.h         \
- vnet/nsh-vxlan-gpe/nsh_vxlan_gpe_error.def
+ vnet/ipsec-gre/ipsec_gre.h                    \
+ vnet/ipsec-gre/error.def
 
 ########################################
 # LISP control plane: lisp-cp
@@ -430,6 +540,7 @@ nobase_include_HEADERS +=                   \
 
 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                        \
@@ -445,7 +556,7 @@ nobase_include_HEADERS +=                   \
 
 
 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
@@ -477,11 +588,18 @@ endif
 
 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/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              
 
@@ -526,7 +644,8 @@ nobase_include_HEADERS +=                   \
 
 if WITH_IPV6SR
 libvnet_la_SOURCES +=                          \
- vnet/sr/sr.c
+ vnet/sr/sr.c                                  \
+ vnet/sr/sr_replicate.c
 endif
  
 nobase_include_HEADERS +=                      \
@@ -534,41 +653,6 @@ nobase_include_HEADERS +=                  \
  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
 ########################################
@@ -592,14 +676,14 @@ nobase_include_HEADERS +=                 \
  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
@@ -610,9 +694,21 @@ libvnet_la_SOURCES +=                              \
   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_api.c  \
+  vnet/span/span.c         \
+  vnet/span/node.c
+
+nobase_include_HEADERS +=                      \
+  vnet/span/span.api.h  \
+  vnet/span/span.h
+
 ########################################
 # Packet generator
 ########################################
@@ -630,7 +726,7 @@ nobase_include_HEADERS +=                   \
   vnet/pg/edit.h
 
 ########################################
-# Intel DPDK
+# DPDK
 ########################################
 if WITH_DPDK
 libvnet_la_SOURCES +=                          \
@@ -639,26 +735,30 @@ 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                       \
+  vnet/devices/nic/ixge.h                       \
+  vnet/devices/nic/sfp.c                        \
+  vnet/devices/nic/sfp.h
 endif
 
 ########################################
 # virtio
 ########################################
 
-if WITH_DPDK
 libvnet_la_SOURCES +=       \
-  vnet/devices/virtio/vhost-user.c
+  vnet/devices/virtio/vhost-user.c     \
+  vnet/devices/virtio/vhost_user_api.c
 
 nobase_include_HEADERS +=     \
-  vnet/devices/virtio/vhost-user.h
-endif WITH_DPDK
+  vnet/devices/virtio/vhost-user.h     \
+  vnet/devices/virtio/vhost_user.api.h
 
 ########################################
 # ssvm ethernet
@@ -678,10 +778,12 @@ libvnet_la_SOURCES +=                             \
   vnet/devices/af_packet/af_packet.c           \
   vnet/devices/af_packet/device.c              \
   vnet/devices/af_packet/node.c                        \
-  vnet/devices/af_packet/cli.c
+  vnet/devices/af_packet/cli.c                 \
+  vnet/devices/af_packet/af_packet_api.c
 
-nobase_include_HEADERS +=                      \
-  vnet/devices/af_packet/af_packet.h
+nobase_include_HEADERS +=                              \
+  vnet/devices/af_packet/af_packet.h   \
+  vnet/devices/af_packet/af_packet.api.h
 
 ########################################
 # NETMAP interface
@@ -691,11 +793,23 @@ libvnet_la_SOURCES +=                             \
   vnet/devices/netmap/netmap.c                 \
   vnet/devices/netmap/device.c                 \
   vnet/devices/netmap/node.c                   \
-  vnet/devices/netmap/cli.c
+  vnet/devices/netmap/cli.c                            \
+  vnet/devices/netmap/netmap_api.c
 
 nobase_include_HEADERS +=                      \
-  vnet/devices/netmap/netmap.h
+  vnet/devices/netmap/netmap.h         \
+  vnet/devices/netmap/netmap.api.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
@@ -706,14 +820,106 @@ nobase_include_HEADERS +=                        \
 libvnet_la_SOURCES +=                          \
   vnet/unix/gdb_funcs.c                                \
   vnet/unix/pcap.c                             \
+  vnet/unix/tap_api.c                          \
   vnet/unix/tapcli.c                           \
   vnet/unix/tuntap.c
 
 nobase_include_HEADERS +=                      \
   vnet/unix/pcap.h                             \
   vnet/unix/tuntap.h                           \
+  vnet/unix/tap.api.h                          \
   vnet/unix/tapcli.h
 
+########################################
+# FIB
+########################################
+
+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/fib/fib.h                               \
+  vnet/fib/fib_api.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
+
+########################################
+# ADJ
+########################################
+
+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                            
+
+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                           
+
+########################################
+# Data-Plane Objects
+########################################
+
+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
 ########################################
@@ -726,12 +932,6 @@ nobase_include_HEADERS +=                      \
 
 lib_LTLIBRARIES = libvnet.la libvnetplugin.la
 
-dpdk_libs = 
-
-if WITH_DPDK
-dpdk_libs += -l:libdpdk.a
-endif
-
 pcap2pg_SOURCES =                              \
   vnet/unix/pcap2pg.c                          \
   vnet/unix/pcap.h
@@ -741,4 +941,26 @@ pcap2pg_LDADD = libvnet.la -l:libvppinfra.a -lpthread -lm -ldl
 
 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/devices/af_packet/af_packet.api.json     \
+ vnet/devices/netmap/netmap.api.json           \
+ vnet/devices/virtio/vhost_user.api.json       \
+ vnet/interface.api.json                       \
+ vnet/ip/ip.api.json                           \
+ vnet/l2/l2.api.json                           \
+ vnet/map/map.api.json                         \
+ vnet/span/span.api.json                       \
+ vnet/unix/tap.api.json                                \
+ vnet/vxlan/vxlan.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