Smart network interface cards (NICs) offload low-level functions from server CPUs, dramatically increasing network and application performance. By installing smart NICs, communications service providers can deliver significantly better revenue-earning services with a small increase in investment. FPGA smart NICs are programmed using standard FPGA tools or a software development environment supported by operators. Processor-based smart NICs are programmed using standard development tools and software development kits (SDKs). A few smart NIC vendors are also supporting P4, a packet processing language, which is being used to develop solutions based on FPGA smart NICs, processor smart NICs and programmable switches.