Commit 3a6cef8c authored by Shah Rinku's avatar Shah Rinku

Working solution for dispatcher NIC offload

parent 2867ff9b
...@@ -7,3 +7,29 @@ secrets.json ...@@ -7,3 +7,29 @@ secrets.json
resource_system/bin/** resource_system/bin/**
resource_system/version.linux resource_system/version.linux
local_experiments/ local_experiments/
.vscode
p4src/Makefile-nfp4build
p4src/app_master.list/
p4src/blm0.list/
p4src/echo.nffw
p4src/echo.yml
p4src/flowcache_timeout_emu0.list/
p4src/gro0.list/
p4src/gro1.list/
p4src/nbi_init_csr.list/
p4src/nfd_pcie0_notify.list/
p4src/nfd_pcie0_pci_in_gather.list/
p4src/nfd_pcie0_pci_in_issue0.list/
p4src/nfd_pcie0_pci_in_issue1.list/
p4src/nfd_pcie0_pci_out_me0.list/
p4src/nfd_pcie0_pd0.list/
p4src/nfd_pcie0_pd1.list/
p4src/nfd_pcie0_sb.list/
p4src/nfd_svc.list/
p4src/out/
p4src/pif_app_nfd.list/
client/Makefile-nfp4build
*.list
p4src/out_dir
*.nffw
import socket
import struct
import time
import threading
import random
import time
import argparse
parser = argparse.ArgumentParser(description='Mininet demo')
parser.add_argument('--fid', help='Funtion id',
type=int, action="store", required=False)
parser.add_argument('--c', help='Concurrency',
type=int, action="store", required=True)
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('--rps', help='Requests per second',
type=int, action="store")
group.add_argument('--n', help='Number of requests to send',
type=int, action="store")
args = parser.parse_args()
PORT = 8000
dataInt = 0
fid = args.fid
SERVER_IP = "192.168.2.3"
egress_time = []
ingress_time = []
stop_thread = False
def receive():
global egress_time, stop_thread
CLIENT_IP = "0.0.0.0"
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((CLIENT_IP, 8080))
print "listening to {} at port {}".format(CLIENT_IP, 8080)
run_status = {}
while True:
if stop_thread:
break
packet, addr = s.recvfrom(1024)
# print packet
base = 0
chain_id = struct.unpack(">I", packet[base:base + 4])[0]
base += 4
exec_id = struct.unpack(">I", packet[base:base + 4])[0]
base += 4
function_id = struct.unpack(">I", packet[base:base + 4])[0]
base += 4
data = struct.unpack(">I", packet[base:base + 4])[0]
base += 4
function_count = struct.unpack("B", packet[base])[0]
t = int(time.time() * 1000) % 1000000000
data = int(data) - t
print "rec", chain_id, exec_id, data, function_id, function_count,
def genPacket():
global fid
packet = None
exec_id = random.randint(0, 2 ** 30)
print exec_id
chain_id = 1
function_count = 5
function_id = fid if (fid) else 1
f0 = 0; f1 = 1; f2 = 2; f3 = 0; f4 = 0
print chain_id, exec_id, "function_id", function_id, function_count, \
f0, f1, f2, f3, f4
chain_id = struct.pack(">I", chain_id) # chain id
exec_id = struct.pack(">I", exec_id) # execution id
dataInt = int(time.time() * 1000) % 1000000000
data = struct.pack(">I", dataInt) # data
function_count = struct.pack("B", function_count) # function count
function_id_packed = struct.pack(">I", function_id)
f0 = struct.pack("B", f0) # f0
f1 = struct.pack("B", f1) # f1
f2 = struct.pack("B", f2) # f2 -> f0
f3 = struct.pack("B", f3) # f3 -> f1 f2
f4 = struct.pack("B", f4) # f4 -> f3
packet = chain_id + exec_id + function_id_packed + data + function_count + f0 + f1 + f2 + f3 + f4
# print dataInt, offload_status
return packet, function_id
def sendThread(start_time, runtime, sleep_time):
global ingress_time
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while True:
packet, function_id = genPacket()
if time.time() - start_time > runtime:
break
s.sendto(packet, (SERVER_IP, PORT))
ingress_time.append(time.time())
time.sleep(sleep_time)
def send():
global egress_time, ingress_time
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
print "Sending packet to %s at port %s" % (SERVER_IP, PORT)
print "chain id, exec id, data, function count, functions dependencies..."
# op = struct.unpack("B", packet[0])
packet, _ = genPacket()
if args.n is not None:
for i in range(args.req_count):
s.sendto(packet, (SERVER_IP, PORT))
ingress_time.append(time.time())
elif args.rps is not None:
runtime = 10
thread_count = args.c
start_time = time.time()
sleep_time = thread_count / float(args.rps)
print "calculated inter-arrival time, offload mode", sleep_time
for i in range(thread_count):
t = threading.Thread(target=sendThread, args=[
start_time, runtime, sleep_time])
t.daemon = True
t.start()
time.sleep(runtime)
stop_thread = True
# s.sendto(packet, (SERVER_IP, PORT))
# r.join()
r = threading.Thread(name="receive", target=receive)
r.daemon = True
r.start()
time.sleep(1)
send()
r.join()
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
"body-parser": "^1.19.0", "body-parser": "^1.19.0",
"express": "^4.17.1", "express": "^4.17.1",
"express-fileupload": "^1.1.6", "express-fileupload": "^1.1.6",
"jspack": "^0.0.4",
"kafka-node": "^5.0.0", "kafka-node": "^5.0.0",
"morgan": "^1.9.1", "morgan": "^1.9.1",
"mqtt": "^3.0.0", "mqtt": "^3.0.0",
......
#
# Generated Makefile for test
#
ifndef SDKDIR
export SDKDIR=/opt/netronome
endif
ifndef SDKTOOLSDIR
SDKTOOLSDIR=$(SDKDIR)/bin
endif
ifndef SDKP4DIR
SDKP4DIR=$(SDKDIR)/p4
endif
ifndef OUTDIR
OUTDIR=p4src
endif
ifndef PIFOUTDIR
PIFOUTDIR=p4src/out
endif
NFP4C_FOUND = $(shell if [ -x $(SDKP4DIR)/bin/nfp4c ]; then echo "found"; fi)
ifneq ($(NFP4C_FOUND),found)
$(warning warning: nfp4c not found or not executable, on windows please run nfp4term.bat)
endif
NFIRC_FOUND = $(shell if [ -x $(SDKP4DIR)/bin/nfirc ]; then echo "found"; fi)
ifneq ($(NFIRC_FOUND),found)
$(warning warning: nfirc not found or not executable, on windows please run nfp4term.bat)
endif
NFLD_FOUND = $(shell if [ -x $(SDKTOOLSDIR)/nfld ]; then echo "found"; fi)
ifneq ($(NFLD_FOUND),found)
$(warning warning: nfld not found or not executable, on windows please run nfp4term.bat)
endif
NFCC_FOUND = $(shell if [ -x $(SDKTOOLSDIR)/nfcc ]; then echo "found"; fi)
ifneq ($(NFCC_FOUND),found)
$(warning warning: nfcc not found or not executable, on windows please run nfp4term.bat)
endif
NFAS_FOUND = $(shell if [ -x $(SDKTOOLSDIR)/nfas ]; then echo "found"; fi)
ifneq ($(NFAS_FOUND),found)
$(warning warning: nfas not found or not executable, on windows please run nfp4term.bat)
endif
NFP4C_FOUND = $(shell if [ -x $(SDKP4DIR)/bin/nfp4c ]; then echo "found"; fi)
ifneq ($(NFP4C_FOUND),found)
$(warning warning: nfp4c not found or not executable, on windows please run nfp4term.bat)
endif
NFIRC_FOUND = $(shell if [ -x $(SDKP4DIR)/bin/nfirc ]; then echo "found"; fi)
ifneq ($(NFIRC_FOUND),found)
$(warning warning: nfirc not found or not executable, on windows please run nfp4term.bat)
endif
NFLD_FOUND = $(shell if [ -x $(SDKTOOLSDIR)/nfld ]; then echo "found"; fi)
ifneq ($(NFLD_FOUND),found)
$(warning warning: nfld not found or not executable, on windows please run nfp4term.bat)
endif
NFCC_FOUND = $(shell if [ -x $(SDKTOOLSDIR)/nfcc ]; then echo "found"; fi)
ifneq ($(NFCC_FOUND),found)
$(warning warning: nfcc not found or not executable, on windows please run nfp4term.bat)
endif
NFAS_FOUND = $(shell if [ -x $(SDKTOOLSDIR)/nfas ]; then echo "found"; fi)
ifneq ($(NFAS_FOUND),found)
$(warning warning: nfas not found or not executable, on windows please run nfp4term.bat)
endif
NFP4C_FOUND = $(shell if [ -x $(SDKP4DIR)/bin/nfp4c ]; then echo "found"; fi)
ifneq ($(NFP4C_FOUND),found)
$(warning warning: nfp4c not found or not executable, on windows please run nfp4term.bat)
endif
NFIRC_FOUND = $(shell if [ -x $(SDKP4DIR)/bin/nfirc ]; then echo "found"; fi)
ifneq ($(NFIRC_FOUND),found)
$(warning warning: nfirc not found or not executable, on windows please run nfp4term.bat)
endif
NFLD_FOUND = $(shell if [ -x $(SDKTOOLSDIR)/nfld ]; then echo "found"; fi)
ifneq ($(NFLD_FOUND),found)
$(warning warning: nfld not found or not executable, on windows please run nfp4term.bat)
endif
NFCC_FOUND = $(shell if [ -x $(SDKTOOLSDIR)/nfcc ]; then echo "found"; fi)
ifneq ($(NFCC_FOUND),found)
$(warning warning: nfcc not found or not executable, on windows please run nfp4term.bat)
endif
NFAS_FOUND = $(shell if [ -x $(SDKTOOLSDIR)/nfas ]; then echo "found"; fi)
ifneq ($(NFAS_FOUND),found)
$(warning warning: nfas not found or not executable, on windows please run nfp4term.bat)
endif
NFP4C_FOUND = $(shell if [ -x $(SDKP4DIR)/bin/nfp4c ]; then echo "found"; fi)
ifneq ($(NFP4C_FOUND),found)
$(warning warning: nfp4c not found or not executable, on windows please run nfp4term.bat)
endif
NFIRC_FOUND = $(shell if [ -x $(SDKP4DIR)/bin/nfirc ]; then echo "found"; fi)
ifneq ($(NFIRC_FOUND),found)
$(warning warning: nfirc not found or not executable, on windows please run nfp4term.bat)
endif
NFLD_FOUND = $(shell if [ -x $(SDKTOOLSDIR)/nfld ]; then echo "found"; fi)
ifneq ($(NFLD_FOUND),found)
$(warning warning: nfld not found or not executable, on windows please run nfp4term.bat)
endif
NFCC_FOUND = $(shell if [ -x $(SDKTOOLSDIR)/nfcc ]; then echo "found"; fi)
ifneq ($(NFCC_FOUND),found)
$(warning warning: nfcc not found or not executable, on windows please run nfp4term.bat)
endif
NFAS_FOUND = $(shell if [ -x $(SDKTOOLSDIR)/nfas ]; then echo "found"; fi)
ifneq ($(NFAS_FOUND),found)
$(warning warning: nfas not found or not executable, on windows please run nfp4term.bat)
endif
$(OUTDIR)/test.nffw: $(OUTDIR)/nfd_pcie0_pd0.list/nfd_pcie0_pd0.list \
$(OUTDIR)/nfd_pcie0_pci_in_issue1.list/nfd_pcie0_pci_in_issue1.list \
$(OUTDIR)/nfd_pcie0_pci_out_me0.list/nfd_pcie0_pci_out_me0.list \
$(OUTDIR)/nbi_init_csr.list/nbi_init_csr.list \
$(OUTDIR)/nfd_pcie0_pd1.list/nfd_pcie0_pd1.list \
$(OUTDIR)/nfd_pcie0_pci_in_issue0.list/nfd_pcie0_pci_in_issue0.list \
$(OUTDIR)/gro1.list/gro1.list \
$(OUTDIR)/pif_app_nfd.list/pif_app_nfd.list \
$(OUTDIR)/app_master.list/app_master.list \
$(OUTDIR)/nfd_svc.list/nfd_svc.list \
$(OUTDIR)/blm0.list/blm0.list \
$(OUTDIR)/gro0.list/gro0.list \
$(OUTDIR)/nfd_pcie0_notify.list/nfd_pcie0_notify.list \
$(OUTDIR)/nfd_pcie0_pci_in_gather.list/nfd_pcie0_pci_in_gather.list \
$(OUTDIR)/flowcache_timeout_emu0.list/flowcache_timeout_emu0.list \
$(OUTDIR)/nfd_pcie0_sb.list/nfd_pcie0_sb.list \
$(PIFOUTDIR)/build_info.json \
$(MAKEFILE_LIST)
@echo ---------
@echo linking $@
@echo ---------
$(SDKTOOLSDIR)/nfld -rtsyms -mip -user_note_f pif_debug_json "$(PIFOUTDIR)/pif_debug.json" -user_note_f build_info_json "$(PIFOUTDIR)/build_info.json" -g -user_note_f pif_design_json "$(PIFOUTDIR)/pif_design.json" \
-i i8 -e $(SDKDIR)/components/standardlibrary/picocode/nfp6000/catamaran/catamaran.npfw \
-chip nfp-4xxxc-b0 -g -o $@ \
-u i36.me9 $(OUTDIR)/nfd_pcie0_pd0.list/nfd_pcie0_pd0.list \
-u pcie0.me3 $(OUTDIR)/nfd_pcie0_pci_in_issue1.list/nfd_pcie0_pci_in_issue1.list \
-u pcie0.me0 $(OUTDIR)/nfd_pcie0_pci_out_me0.list/nfd_pcie0_pci_out_me0.list \
-u i36.me7 $(OUTDIR)/nfd_pcie0_pd1.list/nfd_pcie0_pd1.list \
-u pcie0.me2 $(OUTDIR)/nfd_pcie0_pci_in_issue0.list/nfd_pcie0_pci_in_issue0.list \
-u i48.me1 $(OUTDIR)/gro1.list/gro1.list \
-u i32.me0 i33.me0 i34.me0 i35.me0 i36.me0 i32.me1 i33.me1 \
i34.me1 i35.me1 i36.me1 i32.me2 i33.me2 i34.me2 i35.me2 \
i36.me2 i32.me3 i33.me3 i34.me3 i35.me3 i36.me3 i32.me4 \
i33.me4 i34.me4 i35.me4 i36.me4 i32.me5 i33.me5 i34.me5 \
i35.me5 i36.me5 i32.me6 i33.me6 i34.me6 i35.me6 i32.me7 \
i33.me7 i34.me7 i35.me7 i32.me8 i33.me8 i34.me8 i35.me8 \
i32.me9 i33.me9 i34.me9 i35.me9 i32.me10 i33.me10 i34.me10 \
i35.me10 i32.me11 i33.me11 i34.me11 i35.me11 $(OUTDIR)/pif_app_nfd.list/pif_app_nfd.list \
-u i36.me11 $(OUTDIR)/app_master.list/app_master.list \
-u i48.me2 $(OUTDIR)/nfd_svc.list/nfd_svc.list \
-u i48.me3 $(OUTDIR)/blm0.list/blm0.list \
-u i48.me0 $(OUTDIR)/gro0.list/gro0.list \
-u i36.me6 $(OUTDIR)/nfd_pcie0_notify.list/nfd_pcie0_notify.list \
-u pcie0.me1 $(OUTDIR)/nfd_pcie0_pci_in_gather.list/nfd_pcie0_pci_in_gather.list \
-u i36.me10 $(OUTDIR)/flowcache_timeout_emu0.list/flowcache_timeout_emu0.list \
-u i36.me8 $(OUTDIR)/nfd_pcie0_sb.list/nfd_pcie0_sb.list \
-L $(OUTDIR)/nbi_init_csr.list/nbi_init_csr.list
#
# Generate build info json
#
$(PIFOUTDIR)/build_info.json: $(MAKEFILE_LIST)
@echo ---------
@echo generating $@
@echo ---------
@mkdir -p $(PIFOUTDIR)
@echo -n {\"sku\": \"nfp-4xxxc-b0\", \"worker_mes\": [\"i32.me0\", \"i33.me0\", \"i34.me0\", \"i35.me0\", \"i36.me0\", \"i32.me1\", \"i33.me1\", \"i34.me1\", \"i35.me1\", \"i36.me1\", \"i32.me2\", \"i33.me2\", \"i34.me2\", \"i35.me2\", \"i36.me2\", \"i32.me3\", \"i33.me3\", \"i34.me3\", \"i35.me3\", \"i36.me3\", \"i32.me4\", \"i33.me4\", \"i34.me4\", \"i35.me4\", \"i36.me4\", \"i32.me5\", \"i33.me5\", \"i34.me5\", \"i35.me5\", \"i36.me5\", \"i32.me6\", \"i33.me6\", \"i34.me6\", \"i35.me6\", \"i32.me7\", \"i33.me7\", \"i34.me7\", \"i35.me7\", \"i32.me8\", \"i33.me8\", \"i34.me8\", \"i35.me8\", \"i32.me9\", \"i33.me9\", \"i34.me9\", \"i35.me9\", \"i32.me10\", \"i33.me10\", \"i34.me10\", \"i35.me10\", \"i32.me11\", \"i33.me11\", \"i34.me11\", \"i35.me11\"], \"reduced_thread_usage\": true, \"debug_info\": true, \"simulation\": false} >$@
#
# Generate IR from P4
#
$(OUTDIR)/test.yml: p4src/test.p4 \
$(MAKEFILE_LIST)
@echo ---------
@echo compiling p4 $@
@echo ---------
@mkdir -p $(PIFOUTDIR)
$(SDKP4DIR)/bin/nfp4c -o $(OUTDIR)/test.yml \
--p4-version 16 \
--p4-compiler p4c-nfp \
--source_info \
p4src/test.p4
#
# Generate PIF from IR
#
$(PIFOUTDIR)/pif_design%c \
$(PIFOUTDIR)/pif_design%h \
$(PIFOUTDIR)/pif_parrep%c \
$(PIFOUTDIR)/pif_parrep%h \
$(PIFOUTDIR)/pif_actions%c \
$(PIFOUTDIR)/pif_actions%h \
$(PIFOUTDIR)/pif_global%c \
$(PIFOUTDIR)/pif_global%h \
$(PIFOUTDIR)/pif_ctlflow%c \
$(PIFOUTDIR)/pif_ctlflow%h \
$(PIFOUTDIR)/pif_tables%c \
$(PIFOUTDIR)/pif_tables%h \
$(PIFOUTDIR)/pif_deparse%c \
$(PIFOUTDIR)/pif_digests%c \
$(PIFOUTDIR)/pif_digests%h \
$(PIFOUTDIR)/pif_meters%c \
$(PIFOUTDIR)/pif_meters%h \
$(PIFOUTDIR)/pif_registers%c \
$(PIFOUTDIR)/pif_registers%h \
$(PIFOUTDIR)/pif_pkt_recurse%c \
$(PIFOUTDIR)/pif_pkt_recurse%h \
$(PIFOUTDIR)/pif_pkt_clone%c \
$(PIFOUTDIR)/pif_pkt_clone%h \
$(PIFOUTDIR)/pif_flcalc%c \
$(PIFOUTDIR)/pif_flcalc%h \
$(PIFOUTDIR)/pif_field_lists%h \
$(PIFOUTDIR)/pif_parrep_pvs_sync%c : $(OUTDIR)/test%yml $(MAKEFILE_LIST)
@echo ---------
@echo generating pif $@
@echo ---------
@mkdir -p $(PIFOUTDIR)
$(SDKP4DIR)/bin/nfirc -o $(PIFOUTDIR)/ \
--p4info $(OUTDIR)/test.p4info.json \
--debugpoints \
--mac_ingress_timestamp \
$(OUTDIR)/test.yml
#
# NFD_PCIE0_PD0
#
$(OUTDIR)/nfd_pcie0_pd0.list/nfd_pcie0_pd0.list: $(SDKDIR)/components/ng_nfd/me/blocks/vnic/pci_out_pd.uc \
$(PIFOUTDIR)/pif_design.h \
$(MAKEFILE_LIST)
@echo ---------
@echo assembling $@
@echo ---------
@mkdir -p $(OUTDIR)/nfd_pcie0_pd0.list
$(SDKTOOLSDIR)/nfas -DPLATFORM_PORT_SELECTION=H_PLATFORM \
-DPIF_APP_CONFIG=PIF_APP_DEFAULT \
-DNUM_IMU=1 \
-DNUM_EMU=1 \
-DSIMULATION=0 \
-DPIF_APP_REDUCED_THREADS=1 \
-DPIF_DEBUG=1 \
-DSTAGE_BATCH_MANAGER_CTX=0 \
-DNFD_OUT_SB_WQ_NUM=15 \
-DNFD_OUT_STAGE_ME="__nfp_idstr2meid(\"i36.me8\")" \
-DPCIE_ISL=0 \
-chip nfp-4xxxc-b0 \
-go \
-t \
-W3 \
-R \
-lm 0 \
-C \
-Of \
-Os \
-O \
-I$(SDKDIR)/components/flowenv/me/blocks/blm/_h \
-I$(SDKDIR)/components/flowenv/me/blocks/blm/_uc \
-I$(SDKDIR)/components/flowenv/me/blocks/blm \
-I$(SDKDIR)/components/flowenv/me/blocks \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/include \
-I$(SDKDIR)/components/ng_nfd/me/blocks/vnic \
-I$(SDKDIR)/components/ng_nfd/me/blocks/vnic/shared \
-I$(SDKDIR)/components/ng_nfd/me/blocks \
-I$(SDKDIR)/components/ng_nfd/shared \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/common/include \
-I$(SDKDIR)/components/flowenv/me/include \
-I$(PIFOUTDIR)/ \
-I$(SDKDIR)/components/standardlibrary/microcode/src \
-I$(SDKDIR)/components/standardlibrary/microcode/include \
-I$(SDKDIR)/components/standardlibrary/include \
-include $(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/include/config.h \
-o $@ $(SDKDIR)/components/ng_nfd/me/blocks/vnic/pci_out_pd.uc
#
# NFD_PCIE0_PCI_IN_ISSUE1
#
$(OUTDIR)/nfd_pcie0_pci_in_issue1.list/nfd_pcie0_pci_in_issue1.list: $(SDKDIR)/components/ng_nfd/me/blocks/vnic/pci_in_me1.c \
$(SDKDIR)/components/flowenv/me/blocks/blm/libblm.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/utils/libutils.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/shared/nfd_cfg.c \
$(SDKDIR)/components/standardlibrary/microc/src/intrinsic.c \
$(SDKDIR)/components/standardlibrary/microc/src/rtl.c \
$(SDKDIR)/components/flowenv/me/lib/nfp/libnfp.c \
$(SDKDIR)/components/flowenv/me/lib/std/libstd.c \
$(SDKDIR)/components/flowenv/me/lib/pkt/libpkt.c \
$(SDKDIR)/components/flowenv/me/lib/pktdma/libpktdma.c \
$(SDKDIR)/components/flowenv/me/lib/net/libnet.c \
$(SDKDIR)/components/flowenv/me/lib/modscript/libmodscript.c \
$(PIFOUTDIR)/pif_design.h \
$(MAKEFILE_LIST)
@echo ---------
@echo compiling $@
@echo ---------
@mkdir -p $(OUTDIR)/nfd_pcie0_pci_in_issue1.list
$(SDKTOOLSDIR)/nfcc -DPLATFORM_PORT_SELECTION=H_PLATFORM \
-DPIF_APP_CONFIG=PIF_APP_DEFAULT \
-DNUM_IMU=1 \
-DNUM_EMU=1 \
-DSIMULATION=0 \
-DPIF_APP_REDUCED_THREADS=1 \
-DPIF_DEBUG=1 \
-DNFD_IN_NOTIFY_ME="__nfp_idstr2meid(\"i36.me6\")" \
-DPCI_IN_ISSUE_DMA_IDX=1 \
-DPCIE_ISL=0 \
-chip nfp-4xxxc-b0 \
-W3 \
-Qno_decl_volatile \
-O2 \
-mIPOPT_nfp=2 \
-Zi \
-ng \
-Qnctx=4 \
-Qnctx_mode=4 \
-Qlmpt_reserve_option=0xc \
-I$(SDKDIR)/components/flowenv/me/blocks/blm/_h \
-I$(SDKDIR)/components/flowenv/me/blocks \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/include \
-I$(SDKDIR)/components/ng_nfd/me/blocks \
-I$(SDKDIR)/components/ng_nfd/shared \
-I$(SDKDIR)/components/ng_nfd \
-I$(SDKDIR)/components/standardlibrary/microc/include \
-I$(SDKDIR)/components/standardlibrary/microc/src \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/common/include \
-I$(SDKDIR)/components/flowenv/me/include \
-I$(SDKDIR)/components/flowenv/me/include/nfp6000 \
-I$(SDKDIR)/components/flowenv/me/lib \
-I$(SDKDIR)/components/flowenv/me/lib/nfp \
-I$(PIFOUTDIR)/ \
-I$(PIFOUTDIR)/callbackapi \
-I$(SDKDIR)/components/standardlibrary/include \
-FI$(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/include/config.h \
-Fo$(OUTDIR)/nfd_pcie0_pci_in_issue1.list/ \
-Fe$(OUTDIR)/nfd_pcie0_pci_in_issue1.list/nfd_pcie0_pci_in_issue1 $(NFCC_FLAGS) \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/pci_in_me1.c \
$(SDKDIR)/components/flowenv/me/blocks/blm/libblm.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/utils/libutils.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/shared/nfd_cfg.c \
$(SDKDIR)/components/standardlibrary/microc/src/intrinsic.c \
$(SDKDIR)/components/standardlibrary/microc/src/rtl.c \
$(SDKDIR)/components/flowenv/me/lib/nfp/libnfp.c \
$(SDKDIR)/components/flowenv/me/lib/std/libstd.c \
$(SDKDIR)/components/flowenv/me/lib/pkt/libpkt.c \
$(SDKDIR)/components/flowenv/me/lib/pktdma/libpktdma.c \
$(SDKDIR)/components/flowenv/me/lib/net/libnet.c \
$(SDKDIR)/components/flowenv/me/lib/modscript/libmodscript.c
#
# NFD_PCIE0_PCI_OUT_ME0
#
$(OUTDIR)/nfd_pcie0_pci_out_me0.list/nfd_pcie0_pci_out_me0.list: $(SDKDIR)/components/ng_nfd/me/blocks/vnic/pci_out_me0.c \
$(SDKDIR)/components/flowenv/me/blocks/blm/libblm.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/utils/libutils.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/shared/nfd_cfg.c \
$(SDKDIR)/components/standardlibrary/microc/src/intrinsic.c \
$(SDKDIR)/components/standardlibrary/microc/src/rtl.c \
$(SDKDIR)/components/flowenv/me/lib/nfp/libnfp.c \
$(SDKDIR)/components/flowenv/me/lib/std/libstd.c \
$(SDKDIR)/components/flowenv/me/lib/pkt/libpkt.c \
$(SDKDIR)/components/flowenv/me/lib/pktdma/libpktdma.c \
$(SDKDIR)/components/flowenv/me/lib/net/libnet.c \
$(SDKDIR)/components/flowenv/me/lib/modscript/libmodscript.c \
$(PIFOUTDIR)/pif_design.h \
$(MAKEFILE_LIST)
@echo ---------
@echo compiling $@
@echo ---------
@mkdir -p $(OUTDIR)/nfd_pcie0_pci_out_me0.list
$(SDKTOOLSDIR)/nfcc -DPLATFORM_PORT_SELECTION=H_PLATFORM \
-DPIF_APP_CONFIG=PIF_APP_DEFAULT \
-DNUM_IMU=1 \
-DNUM_EMU=1 \
-DSIMULATION=0 \
-DPIF_APP_REDUCED_THREADS=1 \
-DPIF_DEBUG=1 \
-DNFD_CFG_SIG_NEXT_ME="nfd_cfg_sig_sb" \
-DNFD_CFG_NEXT_ME="__nfp_idstr2meid(\"i36.me8\")" \
-DPCIE_ISL=0 \
-chip nfp-4xxxc-b0 \
-W3 \
-Qno_decl_volatile \
-O2 \
-mIPOPT_nfp=2 \
-Zi \
-ng \
-Qnctx=8 \
-Qnctx_mode=8 \
-Qlm_start=512 \
-I$(SDKDIR)/components/flowenv/me/blocks/blm/_h \
-I$(SDKDIR)/components/flowenv/me/blocks \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/include \
-I$(SDKDIR)/components/ng_nfd/me/blocks \
-I$(SDKDIR)/components/ng_nfd/shared \
-I$(SDKDIR)/components/ng_nfd \
-I$(SDKDIR)/components/standardlibrary/microc/include \
-I$(SDKDIR)/components/standardlibrary/microc/src \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/common/include \
-I$(SDKDIR)/components/flowenv/me/include \
-I$(SDKDIR)/components/flowenv/me/include/nfp6000 \
-I$(SDKDIR)/components/flowenv/me/lib \
-I$(SDKDIR)/components/flowenv/me/lib/nfp \
-I$(PIFOUTDIR)/ \
-I$(PIFOUTDIR)/callbackapi \
-I$(SDKDIR)/components/standardlibrary/include \
-FI$(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/include/config.h \
-Fo$(OUTDIR)/nfd_pcie0_pci_out_me0.list/ \
-Fe$(OUTDIR)/nfd_pcie0_pci_out_me0.list/nfd_pcie0_pci_out_me0 $(NFCC_FLAGS) \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/pci_out_me0.c \
$(SDKDIR)/components/flowenv/me/blocks/blm/libblm.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/utils/libutils.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/shared/nfd_cfg.c \
$(SDKDIR)/components/standardlibrary/microc/src/intrinsic.c \
$(SDKDIR)/components/standardlibrary/microc/src/rtl.c \
$(SDKDIR)/components/flowenv/me/lib/nfp/libnfp.c \
$(SDKDIR)/components/flowenv/me/lib/std/libstd.c \
$(SDKDIR)/components/flowenv/me/lib/pkt/libpkt.c \
$(SDKDIR)/components/flowenv/me/lib/pktdma/libpktdma.c \
$(SDKDIR)/components/flowenv/me/lib/net/libnet.c \
$(SDKDIR)/components/flowenv/me/lib/modscript/libmodscript.c
#
# NBI_INIT_CSR
#
$(OUTDIR)/nbi_init_csr.list/nbi_init_csr.list: $(SDKP4DIR)/components/nfp_pif/me/apps/common/src/nbi_init.uc \
$(PIFOUTDIR)/pif_design.h \
$(MAKEFILE_LIST)
@echo ---------
@echo assembling $@
@echo ---------
@mkdir -p $(OUTDIR)/nbi_init_csr.list
$(SDKTOOLSDIR)/nfas -DPLATFORM_PORT_SELECTION=H_PLATFORM \
-DPIF_APP_CONFIG=PIF_APP_DEFAULT \
-DNUM_IMU=1 \
-DNUM_EMU=1 \
-DSIMULATION=0 \
-DPIF_APP_REDUCED_THREADS=1 \
-DPIF_DEBUG=1 \
-chip nfp-4xxxc-b0 \
-go \
-W3 \
-R \
-C \
-permit_dram_unaligned \
-preproc64 \
-keep_unreachable_code \
-lm 0 \
-codeless \
-I$(SDKDIR)/components/flowenv/me/blocks/init \
-I$(SDKDIR)/components/flowenv/me/blocks/init/_uc \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/include \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/common/include \
-I$(SDKDIR)/components/standardlibrary/microcode/src \
-I$(SDKDIR)/components/standardlibrary/microcode/include \
-I$(PIFOUTDIR)/ \
-I$(SDKDIR)/components/standardlibrary/include \
-include $(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/include/config.h \
-o $@ $(SDKP4DIR)/components/nfp_pif/me/apps/common/src/nbi_init.uc
#
# NFD_PCIE0_PD1
#
$(OUTDIR)/nfd_pcie0_pd1.list/nfd_pcie0_pd1.list: $(SDKDIR)/components/ng_nfd/me/blocks/vnic/pci_out_pd.uc \
$(PIFOUTDIR)/pif_design.h \
$(MAKEFILE_LIST)
@echo ---------
@echo assembling $@
@echo ---------
@mkdir -p $(OUTDIR)/nfd_pcie0_pd1.list
$(SDKTOOLSDIR)/nfas -DPLATFORM_PORT_SELECTION=H_PLATFORM \
-DPIF_APP_CONFIG=PIF_APP_DEFAULT \
-DNUM_IMU=1 \
-DNUM_EMU=1 \
-DSIMULATION=0 \
-DPIF_APP_REDUCED_THREADS=1 \
-DPIF_DEBUG=1 \
-DSTAGE_BATCH_MANAGER_CTX=0 \
-DNFD_OUT_SB_WQ_NUM=15 \
-DNFD_OUT_STAGE_ME="__nfp_idstr2meid(\"i36.me8\")" \
-DPCIE_ISL=0 \
-chip nfp-4xxxc-b0 \
-go \
-t \
-W3 \
-R \
-lm 0 \
-C \
-Of \
-Os \
-O \
-I$(SDKDIR)/components/flowenv/me/blocks/blm/_h \
-I$(SDKDIR)/components/flowenv/me/blocks/blm/_uc \
-I$(SDKDIR)/components/flowenv/me/blocks/blm \
-I$(SDKDIR)/components/flowenv/me/blocks \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/include \
-I$(SDKDIR)/components/ng_nfd/me/blocks/vnic \
-I$(SDKDIR)/components/ng_nfd/me/blocks/vnic/shared \
-I$(SDKDIR)/components/ng_nfd/me/blocks \
-I$(SDKDIR)/components/ng_nfd/shared \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/common/include \
-I$(SDKDIR)/components/flowenv/me/include \
-I$(PIFOUTDIR)/ \
-I$(SDKDIR)/components/standardlibrary/microcode/src \
-I$(SDKDIR)/components/standardlibrary/microcode/include \
-I$(SDKDIR)/components/standardlibrary/include \
-include $(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/include/config.h \
-o $@ $(SDKDIR)/components/ng_nfd/me/blocks/vnic/pci_out_pd.uc
#
# NFD_PCIE0_PCI_IN_ISSUE0
#
$(OUTDIR)/nfd_pcie0_pci_in_issue0.list/nfd_pcie0_pci_in_issue0.list: $(SDKDIR)/components/ng_nfd/me/blocks/vnic/pci_in_me1.c \
$(SDKDIR)/components/flowenv/me/blocks/blm/libblm.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/utils/libutils.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/shared/nfd_cfg.c \
$(SDKDIR)/components/standardlibrary/microc/src/intrinsic.c \
$(SDKDIR)/components/standardlibrary/microc/src/rtl.c \
$(SDKDIR)/components/flowenv/me/lib/nfp/libnfp.c \
$(SDKDIR)/components/flowenv/me/lib/std/libstd.c \
$(SDKDIR)/components/flowenv/me/lib/pkt/libpkt.c \
$(SDKDIR)/components/flowenv/me/lib/pktdma/libpktdma.c \
$(SDKDIR)/components/flowenv/me/lib/net/libnet.c \
$(SDKDIR)/components/flowenv/me/lib/modscript/libmodscript.c \
$(PIFOUTDIR)/pif_design.h \
$(MAKEFILE_LIST)
@echo ---------
@echo compiling $@
@echo ---------
@mkdir -p $(OUTDIR)/nfd_pcie0_pci_in_issue0.list
$(SDKTOOLSDIR)/nfcc -DPLATFORM_PORT_SELECTION=H_PLATFORM \
-DPIF_APP_CONFIG=PIF_APP_DEFAULT \
-DNUM_IMU=1 \
-DNUM_EMU=1 \
-DSIMULATION=0 \
-DPIF_APP_REDUCED_THREADS=1 \
-DPIF_DEBUG=1 \
-DNFD_IN_NOTIFY_ME="__nfp_idstr2meid(\"i36.me6\")" \
-DPCI_IN_ISSUE_DMA_IDX=0 \
-DPCIE_ISL=0 \
-chip nfp-4xxxc-b0 \
-W3 \
-Qno_decl_volatile \
-O2 \
-mIPOPT_nfp=2 \
-Zi \
-ng \
-Qnctx=4 \
-Qnctx_mode=4 \
-Qlmpt_reserve_option=0xc \
-I$(SDKDIR)/components/flowenv/me/blocks/blm/_h \
-I$(SDKDIR)/components/flowenv/me/blocks \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/include \
-I$(SDKDIR)/components/ng_nfd/me/blocks \
-I$(SDKDIR)/components/ng_nfd/shared \
-I$(SDKDIR)/components/ng_nfd \
-I$(SDKDIR)/components/standardlibrary/microc/include \
-I$(SDKDIR)/components/standardlibrary/microc/src \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/common/include \
-I$(SDKDIR)/components/flowenv/me/include \
-I$(SDKDIR)/components/flowenv/me/include/nfp6000 \
-I$(SDKDIR)/components/flowenv/me/lib \
-I$(SDKDIR)/components/flowenv/me/lib/nfp \
-I$(PIFOUTDIR)/ \
-I$(PIFOUTDIR)/callbackapi \
-I$(SDKDIR)/components/standardlibrary/include \
-FI$(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/include/config.h \
-Fo$(OUTDIR)/nfd_pcie0_pci_in_issue0.list/ \
-Fe$(OUTDIR)/nfd_pcie0_pci_in_issue0.list/nfd_pcie0_pci_in_issue0 $(NFCC_FLAGS) \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/pci_in_me1.c \
$(SDKDIR)/components/flowenv/me/blocks/blm/libblm.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/utils/libutils.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/shared/nfd_cfg.c \
$(SDKDIR)/components/standardlibrary/microc/src/intrinsic.c \
$(SDKDIR)/components/standardlibrary/microc/src/rtl.c \
$(SDKDIR)/components/flowenv/me/lib/nfp/libnfp.c \
$(SDKDIR)/components/flowenv/me/lib/std/libstd.c \
$(SDKDIR)/components/flowenv/me/lib/pkt/libpkt.c \
$(SDKDIR)/components/flowenv/me/lib/pktdma/libpktdma.c \
$(SDKDIR)/components/flowenv/me/lib/net/libnet.c \
$(SDKDIR)/components/flowenv/me/lib/modscript/libmodscript.c
#
# GRO1
#
$(OUTDIR)/gro1.list/gro1.list: $(SDKP4DIR)/components/gro/me/gro_out.uc \
$(PIFOUTDIR)/pif_design.h \
$(MAKEFILE_LIST)
@echo ---------
@echo assembling $@
@echo ---------
@mkdir -p $(OUTDIR)/gro1.list
$(SDKTOOLSDIR)/nfas -DPLATFORM_PORT_SELECTION=H_PLATFORM \
-DPIF_APP_CONFIG=PIF_APP_DEFAULT \
-DNUM_IMU=1 \
-DNUM_EMU=1 \
-DSIMULATION=0 \
-DPIF_APP_REDUCED_THREADS=1 \
-DPIF_DEBUG=1 \
-DNFD_VERSION=0x03010000 \
-DNFP_LIB_ANY_NFAS_VERSION \
-DGRO_BLOCK_NUM=1 \
-chip nfp-4xxxc-b0 \
-go \
-W3 \
-R \
-C \
-indirect_ref_format_nfp6000 \
-third_party_addressing_40_bit \
-permit_dram_unaligned \
-preproc64 \
-keep_unreachable_code \
-lm 0 \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/common/src \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/include \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/common/include \
-I$(SDKP4DIR)/components/gro \
-I$(SDKP4DIR)/components/gro/me \
-I$(PIFOUTDIR)/ \
-I$(SDKDIR)/components/standardlibrary/microcode/src \
-I$(SDKDIR)/components/standardlibrary/microcode/include \
-I$(SDKDIR)/components/standardlibrary/include \
-include $(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/include/config.h \
-o $@ $(SDKP4DIR)/components/gro/me/gro_out.uc
#
# PIF_APP_NFD
#
$(OUTDIR)/pif_app_nfd.list/pif_app_nfd.list: $(SDKP4DIR)/components/nfp_pif/me/apps/common/src/fc.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/hashmap/src/camp_hash.c \
$(SDKP4DIR)/components/flowcache/me/lib/flowcache/_c/flow_cache.c \
$(SDKP4DIR)/components/flowcache/me/lib/flowcache/_c/flow_cache_remove.c \
$(SDKP4DIR)/components/flowcache/me/lib/flowcache/_c/flow_cache_timestamp.c \
$(SDKP4DIR)/components/flowcache/me/lib/flowcache/_c/flow_cache_lock.c \
$(SDKP4DIR)/components/flowcache/me/lib/standardlibrary/_c/mem_atomic_indirect.c \
$(SDKP4DIR)/components/flowcache/me/lib/standardlibrary/_c/mem_cam_add_inc.c \
$(SDKP4DIR)/components/flowcache/me/lib/standardlibrary/_c/cluster_target.c \
$(SDKP4DIR)/components/flowcache/me/lib/standardlibrary/_c/cam.c \
$(SDKP4DIR)/components/nfp_pif/me/apps/common/src/pif_app_nfd.c \
$(SDKP4DIR)/components/nfp_pif/me/apps/common/src/pkt_clone.c \
$(SDKP4DIR)/components/nfp_pif/me/apps/common/src/mcast.c \
$(SDKP4DIR)/components/nfp_pif/me/apps/common/src/pif_app_controller.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/cflow_tstamp/src/cflow_tstamp.c \
$(SDKP4DIR)/components/nfp_pif/me/apps/common/src/dcfl_init.c \
$(SDKP4DIR)/components/nfp_pif/me/apps/common/src/system_init.c \
$(SDKDIR)/components/flowenv/me/lib/pktio/libpktio.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/libnfd.c \
$(SDKDIR)/components/flowenv/me/blocks/blm/libblm.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/macflush/libmacflushuser.c \
$(PIFOUTDIR)/pif_design.c \
$(PIFOUTDIR)/pif_parrep.c \
$(PIFOUTDIR)/pif_actions.c \
$(PIFOUTDIR)/pif_global.c \
$(PIFOUTDIR)/pif_ctlflow.c \
$(PIFOUTDIR)/pif_tables.c \
$(PIFOUTDIR)/pif_deparse.c \
$(PIFOUTDIR)/pif_digests.c \
$(PIFOUTDIR)/pif_meters.c \
$(PIFOUTDIR)/pif_registers.c \
$(PIFOUTDIR)/pif_pkt_recurse.c \
$(PIFOUTDIR)/pif_pkt_clone.c \
$(PIFOUTDIR)/pif_flcalc.c \
$(SDKP4DIR)/components/gro/libgro.c \
$(SDKDIR)/components/standardlibrary/microc/src/intrinsic.c \
$(SDKDIR)/components/standardlibrary/microc/src/rtl.c \
$(SDKDIR)/components/flowenv/me/lib/nfp/libnfp.c \
$(SDKDIR)/components/flowenv/me/lib/std/libstd.c \
$(SDKDIR)/components/flowenv/me/lib/pkt/libpkt.c \
$(SDKDIR)/components/flowenv/me/lib/pktdma/libpktdma.c \
$(SDKDIR)/components/flowenv/me/lib/net/libnet.c \
$(SDKDIR)/components/flowenv/me/lib/modscript/libmodscript.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/pif/src/mac_time_user.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/pif/src/pif_action_common.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/pif/src/pif_meter.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/pif/src/pif_lookup.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/pif/src/pif_pkt.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/pif/src/pif_counters.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/pif/src/pif_init.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/pif/src/pif_flcalc_algorithms.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/pif/src/pif_memops.c \
$(SDKP4DIR)/components/dcfl/me/lib/dcfl/libdcfl.c \
$(PIFOUTDIR)/pif_design.h \
$(MAKEFILE_LIST)
@echo ---------
@echo compiling $@
@echo ---------
@mkdir -p $(OUTDIR)/pif_app_nfd.list
$(SDKTOOLSDIR)/nfcc -DPLATFORM_PORT_SELECTION=H_PLATFORM \
-DPIF_APP_CONFIG=PIF_APP_DEFAULT \
-DNUM_IMU=1 \
-DNUM_EMU=1 \
-DSIMULATION=0 \
-DPIF_APP_REDUCED_THREADS=1 \
-DPIF_DEBUG=1 \
-DPIF_APP_MASTER_ME=0x204 \
-DHASHMAP_CAMPHASH \
-chip nfp-4xxxc-b0 \
-W3 \
-Qno_decl_volatile \
-O2 \
-mIPOPT_nfp=2 \
-Zi \
-ng \
-Qnctx=4 \
-Qnctx_mode=4 \
-Qnn_mode=1 \
-Qspill=3 \
-I$(SDKP4DIR)/components/nfp_pif/me/lib/hashmap/include \
-I$(SDKP4DIR)/components/flowcache/me/lib/flowcache \
-I$(SDKP4DIR)/components/flowcache/me/lib/standardlibrary \
-I$(SDKP4DIR)/components/nfp_pif/me/lib/cflow_tstamp/include \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/common/include \
-I$(SDKP4DIR)/components/nfp_pif/shared/include \
-I$(SDKDIR)/components/ng_nfd/me/lib \
-I$(SDKDIR)/components/ng_nfd/me/blocks \
-I$(SDKDIR)/components/ng_nfd/shared \
-I$(SDKDIR)/components/ng_nfd \
-I$(SDKDIR)/components/flowenv/me/blocks/blm/_h \
-I$(SDKDIR)/components/flowenv/me/blocks \
-I$(SDKP4DIR)/components/nfp_pif/me/lib \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/include \
-I$(SDKP4DIR)/components/gro \
-I$(SDKDIR)/components/standardlibrary/microc/include \
-I$(SDKDIR)/components/standardlibrary/microc/src \
-I$(SDKDIR)/components/flowenv/me/include \
-I$(SDKDIR)/components/flowenv/me/include/nfp6000 \
-I$(SDKDIR)/components/flowenv/me/lib \
-I$(SDKDIR)/components/flowenv/me/lib/nfp \
-I$(PIFOUTDIR)/ \
-I$(PIFOUTDIR)/callbackapi \
-I$(SDKP4DIR)/components/nfp_pif/me/lib/pif/include \
-I$(SDKP4DIR)/components/dcfl/me/lib/dcfl \
-I$(SDKP4DIR)/components/dcfl/shared/include/dcfl \
-I$(SDKDIR)/components/standardlibrary/include \
-FI$(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/include/config.h \
-Fo$(OUTDIR)/pif_app_nfd.list/ \
-Fe$(OUTDIR)/pif_app_nfd.list/pif_app_nfd $(NFCC_FLAGS) \
$(SDKP4DIR)/components/nfp_pif/me/apps/common/src/fc.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/hashmap/src/camp_hash.c \
$(SDKP4DIR)/components/flowcache/me/lib/flowcache/_c/flow_cache.c \
$(SDKP4DIR)/components/flowcache/me/lib/flowcache/_c/flow_cache_remove.c \
$(SDKP4DIR)/components/flowcache/me/lib/flowcache/_c/flow_cache_timestamp.c \
$(SDKP4DIR)/components/flowcache/me/lib/flowcache/_c/flow_cache_lock.c \
$(SDKP4DIR)/components/flowcache/me/lib/standardlibrary/_c/mem_atomic_indirect.c \
$(SDKP4DIR)/components/flowcache/me/lib/standardlibrary/_c/mem_cam_add_inc.c \
$(SDKP4DIR)/components/flowcache/me/lib/standardlibrary/_c/cluster_target.c \
$(SDKP4DIR)/components/flowcache/me/lib/standardlibrary/_c/cam.c \
$(SDKP4DIR)/components/nfp_pif/me/apps/common/src/pif_app_nfd.c \
$(SDKP4DIR)/components/nfp_pif/me/apps/common/src/pkt_clone.c \
$(SDKP4DIR)/components/nfp_pif/me/apps/common/src/mcast.c \
$(SDKP4DIR)/components/nfp_pif/me/apps/common/src/pif_app_controller.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/cflow_tstamp/src/cflow_tstamp.c \
$(SDKP4DIR)/components/nfp_pif/me/apps/common/src/dcfl_init.c \
$(SDKP4DIR)/components/nfp_pif/me/apps/common/src/system_init.c \
$(SDKDIR)/components/flowenv/me/lib/pktio/libpktio.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/libnfd.c \
$(SDKDIR)/components/flowenv/me/blocks/blm/libblm.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/macflush/libmacflushuser.c \
$(PIFOUTDIR)/pif_design.c \
$(PIFOUTDIR)/pif_parrep.c \
$(PIFOUTDIR)/pif_actions.c \
$(PIFOUTDIR)/pif_global.c \
$(PIFOUTDIR)/pif_ctlflow.c \
$(PIFOUTDIR)/pif_tables.c \
$(PIFOUTDIR)/pif_deparse.c \
$(PIFOUTDIR)/pif_digests.c \
$(PIFOUTDIR)/pif_meters.c \
$(PIFOUTDIR)/pif_registers.c \
$(PIFOUTDIR)/pif_pkt_recurse.c \
$(PIFOUTDIR)/pif_pkt_clone.c \
$(PIFOUTDIR)/pif_flcalc.c \
$(SDKP4DIR)/components/gro/libgro.c \
$(SDKDIR)/components/standardlibrary/microc/src/intrinsic.c \
$(SDKDIR)/components/standardlibrary/microc/src/rtl.c \
$(SDKDIR)/components/flowenv/me/lib/nfp/libnfp.c \
$(SDKDIR)/components/flowenv/me/lib/std/libstd.c \
$(SDKDIR)/components/flowenv/me/lib/pkt/libpkt.c \
$(SDKDIR)/components/flowenv/me/lib/pktdma/libpktdma.c \
$(SDKDIR)/components/flowenv/me/lib/net/libnet.c \
$(SDKDIR)/components/flowenv/me/lib/modscript/libmodscript.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/pif/src/mac_time_user.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/pif/src/pif_action_common.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/pif/src/pif_meter.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/pif/src/pif_lookup.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/pif/src/pif_pkt.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/pif/src/pif_counters.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/pif/src/pif_init.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/pif/src/pif_flcalc_algorithms.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/pif/src/pif_memops.c \
$(SDKP4DIR)/components/dcfl/me/lib/dcfl/libdcfl.c
#
# APP_MASTER
#
$(OUTDIR)/app_master.list/app_master.list: $(SDKP4DIR)/components/nfp_pif/me/lib/hashmap/src/camp_hash.c \
$(SDKP4DIR)/components/nfp_pif/me/apps/common/src/dcfl_init.c \
$(SDKP4DIR)/components/nfp_pif/me/apps/common/src/system_init.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/libnfd.c \
$(SDKDIR)/components/flowenv/me/blocks/blm/libblm.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/macflush/libmacflushuser.c \
$(SDKP4DIR)/components/gro/libgro.c \
$(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/src/app_master.c \
$(SDKP4DIR)/components/nfp_pif/me/apps/common/src/app_master_common.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/pif/src/pif_init.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/pif/src/mac_time.c \
$(PIFOUTDIR)/pif_digests.c \
$(PIFOUTDIR)/pif_parrep_pvs_sync.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/macflush/libmacflush.c \
$(SDKDIR)/components/standardlibrary/microc/src/intrinsic.c \
$(SDKDIR)/components/standardlibrary/microc/src/rtl.c \
$(SDKDIR)/components/flowenv/me/lib/nfp/libnfp.c \
$(SDKDIR)/components/flowenv/me/lib/std/libstd.c \
$(SDKDIR)/components/flowenv/me/lib/pkt/libpkt.c \
$(SDKDIR)/components/flowenv/me/lib/pktdma/libpktdma.c \
$(SDKDIR)/components/flowenv/me/lib/net/libnet.c \
$(SDKDIR)/components/flowenv/me/lib/modscript/libmodscript.c \
$(SDKP4DIR)/components/flowcache/me/lib/flowcache/_c/flow_cache.c \
$(SDKP4DIR)/components/flowcache/me/lib/flowcache/_c/flow_cache_remove.c \
$(SDKP4DIR)/components/flowcache/me/lib/flowcache/_c/flow_cache_timestamp.c \
$(SDKP4DIR)/components/flowcache/me/lib/flowcache/_c/flow_cache_lock.c \
$(SDKP4DIR)/components/flowcache/me/lib/standardlibrary/_c/mem_atomic_indirect.c \
$(SDKP4DIR)/components/flowcache/me/lib/standardlibrary/_c/mem_cam_add_inc.c \
$(SDKP4DIR)/components/flowcache/me/lib/standardlibrary/_c/cluster_target.c \
$(SDKP4DIR)/components/flowcache/me/lib/standardlibrary/_c/cam.c \
$(SDKP4DIR)/components/dcfl/me/lib/dcfl/libdcfl.c \
$(PIFOUTDIR)/pif_design.h \
$(MAKEFILE_LIST)
@echo ---------
@echo compiling $@
@echo ---------
@mkdir -p $(OUTDIR)/app_master.list
$(SDKTOOLSDIR)/nfcc -DPLATFORM_PORT_SELECTION=H_PLATFORM \
-DPIF_APP_CONFIG=PIF_APP_DEFAULT \
-DNUM_IMU=1 \
-DNUM_EMU=1 \
-DSIMULATION=0 \
-DPIF_APP_REDUCED_THREADS=1 \
-DPIF_DEBUG=1 \
-DPKT_MOD_SCRIPT_INIT_CSR \
-DGLOBAL_INIT \
-DHASHMAP_CAMPHASH \
-chip nfp-4xxxc-b0 \
-W3 \
-Qno_decl_volatile \
-O2 \
-mIPOPT_nfp=2 \
-Zi \
-ng \
-Qnctx=8 \
-Qnctx_mode=8 \
-Qnn_mode=1 \
-Qspill=3 \
-I$(SDKP4DIR)/components/nfp_pif/me/lib/hashmap/include \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/common/include \
-I$(SDKP4DIR)/components/nfp_pif/shared/include \
-I$(SDKDIR)/components/ng_nfd/me/lib \
-I$(SDKDIR)/components/ng_nfd/me/blocks \
-I$(SDKDIR)/components/ng_nfd/shared \
-I$(SDKDIR)/components/ng_nfd \
-I$(SDKDIR)/components/flowenv/me/blocks/blm/_h \
-I$(SDKDIR)/components/flowenv/me/blocks \
-I$(SDKP4DIR)/components/nfp_pif/me/lib \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/include \
-I$(SDKP4DIR)/components/gro \
-I$(SDKP4DIR)/components/nfp_pif/me/lib/pif/include \
-I$(SDKP4DIR)/components/nfp_pif/me/lib/macflush \
-I$(SDKDIR)/components/standardlibrary/microc/include \
-I$(SDKDIR)/components/standardlibrary/microc/src \
-I$(SDKDIR)/components/flowenv/me/include \
-I$(SDKDIR)/components/flowenv/me/include/nfp6000 \
-I$(SDKDIR)/components/flowenv/me/lib \
-I$(SDKDIR)/components/flowenv/me/lib/nfp \
-I$(PIFOUTDIR)/ \
-I$(PIFOUTDIR)/callbackapi \
-I$(SDKP4DIR)/components/flowcache/me/lib/flowcache \
-I$(SDKP4DIR)/components/flowcache/me/lib/standardlibrary \
-I$(SDKP4DIR)/components/dcfl/me/lib/dcfl \
-I$(SDKP4DIR)/components/dcfl/shared/include/dcfl \
-I$(SDKDIR)/components/standardlibrary/include \
-FI$(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/include/config.h \
-Fo$(OUTDIR)/app_master.list/ \
-Fe$(OUTDIR)/app_master.list/app_master $(NFCC_FLAGS) \
$(SDKP4DIR)/components/nfp_pif/me/lib/hashmap/src/camp_hash.c \
$(SDKP4DIR)/components/nfp_pif/me/apps/common/src/dcfl_init.c \
$(SDKP4DIR)/components/nfp_pif/me/apps/common/src/system_init.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/libnfd.c \
$(SDKDIR)/components/flowenv/me/blocks/blm/libblm.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/macflush/libmacflushuser.c \
$(SDKP4DIR)/components/gro/libgro.c \
$(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/src/app_master.c \
$(SDKP4DIR)/components/nfp_pif/me/apps/common/src/app_master_common.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/pif/src/pif_init.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/pif/src/mac_time.c \
$(PIFOUTDIR)/pif_digests.c \
$(PIFOUTDIR)/pif_parrep_pvs_sync.c \
$(SDKP4DIR)/components/nfp_pif/me/lib/macflush/libmacflush.c \
$(SDKDIR)/components/standardlibrary/microc/src/intrinsic.c \
$(SDKDIR)/components/standardlibrary/microc/src/rtl.c \
$(SDKDIR)/components/flowenv/me/lib/nfp/libnfp.c \
$(SDKDIR)/components/flowenv/me/lib/std/libstd.c \
$(SDKDIR)/components/flowenv/me/lib/pkt/libpkt.c \
$(SDKDIR)/components/flowenv/me/lib/pktdma/libpktdma.c \
$(SDKDIR)/components/flowenv/me/lib/net/libnet.c \
$(SDKDIR)/components/flowenv/me/lib/modscript/libmodscript.c \
$(SDKP4DIR)/components/flowcache/me/lib/flowcache/_c/flow_cache.c \
$(SDKP4DIR)/components/flowcache/me/lib/flowcache/_c/flow_cache_remove.c \
$(SDKP4DIR)/components/flowcache/me/lib/flowcache/_c/flow_cache_timestamp.c \
$(SDKP4DIR)/components/flowcache/me/lib/flowcache/_c/flow_cache_lock.c \
$(SDKP4DIR)/components/flowcache/me/lib/standardlibrary/_c/mem_atomic_indirect.c \
$(SDKP4DIR)/components/flowcache/me/lib/standardlibrary/_c/mem_cam_add_inc.c \
$(SDKP4DIR)/components/flowcache/me/lib/standardlibrary/_c/cluster_target.c \
$(SDKP4DIR)/components/flowcache/me/lib/standardlibrary/_c/cam.c \
$(SDKP4DIR)/components/dcfl/me/lib/dcfl/libdcfl.c
#
# NFD_SVC
#
$(OUTDIR)/nfd_svc.list/nfd_svc.list: $(SDKDIR)/components/ng_nfd/me/blocks/vnic/svc_me.c \
$(SDKDIR)/components/flowenv/me/blocks/blm/libblm.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/utils/libutils.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/shared/nfd_cfg.c \
$(SDKDIR)/components/standardlibrary/microc/src/intrinsic.c \
$(SDKDIR)/components/standardlibrary/microc/src/rtl.c \
$(SDKDIR)/components/flowenv/me/lib/nfp/libnfp.c \
$(SDKDIR)/components/flowenv/me/lib/std/libstd.c \
$(SDKDIR)/components/flowenv/me/lib/pkt/libpkt.c \
$(SDKDIR)/components/flowenv/me/lib/pktdma/libpktdma.c \
$(SDKDIR)/components/flowenv/me/lib/net/libnet.c \
$(SDKDIR)/components/flowenv/me/lib/modscript/libmodscript.c \
$(PIFOUTDIR)/pif_design.h \
$(MAKEFILE_LIST)
@echo ---------
@echo compiling $@
@echo ---------
@mkdir -p $(OUTDIR)/nfd_svc.list
$(SDKTOOLSDIR)/nfcc -DPLATFORM_PORT_SELECTION=H_PLATFORM \
-DPIF_APP_CONFIG=PIF_APP_DEFAULT \
-DNUM_IMU=1 \
-DNUM_EMU=1 \
-DSIMULATION=0 \
-DPIF_APP_REDUCED_THREADS=1 \
-DPIF_DEBUG=1 \
-DNFD_CFG_NEXT_ME0="__nfp_idstr2meid(\"i36.me11\")" \
-DNFD_CFG_SIG_NEXT_ME0="nfd_cfg_sig_app_master0" \
-DNFD_CFG_NEXT_ME1="__nfp_idstr2meid(\"i36.me11\")" \
-DNFD_CFG_SIG_NEXT_ME1="nfd_cfg_sig_app_master1" \
-DNFD_CFG_NEXT_ME2="__nfp_idstr2meid(\"i36.me11\")" \
-DNFD_CFG_SIG_NEXT_ME2="nfd_cfg_sig_app_master2" \
-DNFD_CFG_NEXT_ME3="__nfp_idstr2meid(\"i36.me11\")" \
-DNFD_CFG_SIG_NEXT_ME3="nfd_cfg_sig_app_master3" \
-chip nfp-4xxxc-b0 \
-W3 \
-Qno_decl_volatile \
-O2 \
-mIPOPT_nfp=2 \
-Zi \
-ng \
-Qnctx=8 \
-Qnctx_mode=8 \
-Qnn_mode=1 \
-I$(SDKDIR)/components/flowenv/me/blocks/blm/_h \
-I$(SDKDIR)/components/flowenv/me/blocks \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/include \
-I$(SDKDIR)/components/ng_nfd/me/blocks \
-I$(SDKDIR)/components/ng_nfd/shared \
-I$(SDKDIR)/components/ng_nfd \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/common/include \
-I$(SDKDIR)/components/standardlibrary/microc/include \
-I$(SDKDIR)/components/standardlibrary/microc/src \
-I$(SDKDIR)/components/flowenv/me/include \
-I$(SDKDIR)/components/flowenv/me/include/nfp6000 \
-I$(SDKDIR)/components/flowenv/me/lib \
-I$(SDKDIR)/components/flowenv/me/lib/nfp \
-I$(PIFOUTDIR)/ \
-I$(PIFOUTDIR)/callbackapi \
-I$(SDKDIR)/components/standardlibrary/include \
-FI$(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/include/config.h \
-Fo$(OUTDIR)/nfd_svc.list/ \
-Fe$(OUTDIR)/nfd_svc.list/nfd_svc $(NFCC_FLAGS) \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/svc_me.c \
$(SDKDIR)/components/flowenv/me/blocks/blm/libblm.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/utils/libutils.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/shared/nfd_cfg.c \
$(SDKDIR)/components/standardlibrary/microc/src/intrinsic.c \
$(SDKDIR)/components/standardlibrary/microc/src/rtl.c \
$(SDKDIR)/components/flowenv/me/lib/nfp/libnfp.c \
$(SDKDIR)/components/flowenv/me/lib/std/libstd.c \
$(SDKDIR)/components/flowenv/me/lib/pkt/libpkt.c \
$(SDKDIR)/components/flowenv/me/lib/pktdma/libpktdma.c \
$(SDKDIR)/components/flowenv/me/lib/net/libnet.c \
$(SDKDIR)/components/flowenv/me/lib/modscript/libmodscript.c
#
# BLM0
#
$(OUTDIR)/blm0.list/blm0.list: $(SDKDIR)/components/flowenv/me/blocks/blm/blm_main.uc \
$(PIFOUTDIR)/pif_design.h \
$(MAKEFILE_LIST)
@echo ---------
@echo assembling $@
@echo ---------
@mkdir -p $(OUTDIR)/blm0.list
$(SDKTOOLSDIR)/nfas -DPLATFORM_PORT_SELECTION=H_PLATFORM \
-DPIF_APP_CONFIG=PIF_APP_DEFAULT \
-DNUM_IMU=1 \
-DNUM_EMU=1 \
-DSIMULATION=0 \
-DPIF_APP_REDUCED_THREADS=1 \
-DPIF_DEBUG=1 \
-DBLM_0_ISLAND_48 \
-DNBII=8 \
-DBLM_INSTANCE_ID=0 \
-DBLM_INIT_EMU_RINGS \
-DBLM_BLQ_EMEM_TYPE=emem \
-chip nfp-4xxxc-b0 \
-go \
-W3 \
-R \
-C \
-Of \
-Os \
-O \
-indirect_ref_format_nfp6000 \
-third_party_addressing_40_bit \
-permit_dram_unaligned \
-preproc64 \
-I$(SDKDIR)/components/flowenv/me/blocks/blm/_h \
-I$(SDKDIR)/components/flowenv/me/blocks/blm/_uc \
-I$(SDKDIR)/components/flowenv/me/blocks/blm \
-I$(SDKDIR)/components/flowenv/me/blocks \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/include \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/common/include \
-I$(SDKDIR)/components/standardlibrary/microcode/src \
-I$(SDKDIR)/components/standardlibrary/microcode/include \
-I$(PIFOUTDIR)/ \
-I$(SDKDIR)/components/standardlibrary/include \
-include $(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/include/config.h \
-o $@ $(SDKDIR)/components/flowenv/me/blocks/blm/blm_main.uc
#
# GRO0
#
$(OUTDIR)/gro0.list/gro0.list: $(SDKP4DIR)/components/gro/me/gro_out.uc \
$(PIFOUTDIR)/pif_design.h \
$(MAKEFILE_LIST)
@echo ---------
@echo assembling $@
@echo ---------
@mkdir -p $(OUTDIR)/gro0.list
$(SDKTOOLSDIR)/nfas -DPLATFORM_PORT_SELECTION=H_PLATFORM \
-DPIF_APP_CONFIG=PIF_APP_DEFAULT \
-DNUM_IMU=1 \
-DNUM_EMU=1 \
-DSIMULATION=0 \
-DPIF_APP_REDUCED_THREADS=1 \
-DPIF_DEBUG=1 \
-DNFD_VERSION=0x03010000 \
-DNFP_LIB_ANY_NFAS_VERSION \
-DGRO_BLOCK_NUM=0 \
-chip nfp-4xxxc-b0 \
-go \
-W3 \
-R \
-C \
-indirect_ref_format_nfp6000 \
-third_party_addressing_40_bit \
-permit_dram_unaligned \
-preproc64 \
-keep_unreachable_code \
-lm 0 \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/common/src \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/include \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/common/include \
-I$(SDKP4DIR)/components/gro \
-I$(SDKP4DIR)/components/gro/me \
-I$(PIFOUTDIR)/ \
-I$(SDKDIR)/components/standardlibrary/microcode/src \
-I$(SDKDIR)/components/standardlibrary/microcode/include \
-I$(SDKDIR)/components/standardlibrary/include \
-include $(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/include/config.h \
-o $@ $(SDKP4DIR)/components/gro/me/gro_out.uc
#
# NFD_PCIE0_NOTIFY
#
$(OUTDIR)/nfd_pcie0_notify.list/nfd_pcie0_notify.list: $(SDKDIR)/components/flowenv/me/blocks/blm/libblm.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/pci_in/notify.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/utils/libutils.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/shared/nfd_cfg.c \
$(SDKDIR)/components/standardlibrary/microc/src/intrinsic.c \
$(SDKDIR)/components/standardlibrary/microc/src/rtl.c \
$(SDKDIR)/components/flowenv/me/lib/nfp/libnfp.c \
$(SDKDIR)/components/flowenv/me/lib/std/libstd.c \
$(SDKDIR)/components/flowenv/me/lib/pkt/libpkt.c \
$(SDKDIR)/components/flowenv/me/lib/pktdma/libpktdma.c \
$(SDKDIR)/components/flowenv/me/lib/net/libnet.c \
$(SDKDIR)/components/flowenv/me/lib/modscript/libmodscript.c \
$(PIFOUTDIR)/pif_design.h \
$(MAKEFILE_LIST)
@echo ---------
@echo compiling $@
@echo ---------
@mkdir -p $(OUTDIR)/nfd_pcie0_notify.list
$(SDKTOOLSDIR)/nfcc -DPLATFORM_PORT_SELECTION=H_PLATFORM \
-DPIF_APP_CONFIG=PIF_APP_DEFAULT \
-DNUM_IMU=1 \
-DNUM_EMU=1 \
-DSIMULATION=0 \
-DPIF_APP_REDUCED_THREADS=1 \
-DPIF_DEBUG=1 \
-DNFD_IN_DATA_DMA_ME0="__nfp_idstr2meid(\"pcie0.me2\")" \
-DNFD_IN_DATA_DMA_ME1="__nfp_idstr2meid(\"pcie0.me3\")" \
-DPCIE_ISL=0 \
-DNFD_IN_NOTIFY_DBG_CHKS \
-chip nfp-4xxxc-b0 \
-W3 \
-Qno_decl_volatile \
-O2 \
-mIPOPT_nfp=2 \
-Zi \
-ng \
-Qnctx=4 \
-Qnctx_mode=4 \
-I$(SDKDIR)/components/flowenv/me/blocks/blm/_h \
-I$(SDKDIR)/components/flowenv/me/blocks \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/include \
-I$(SDKDIR)/components/ng_nfd/me/blocks \
-I$(SDKDIR)/components/ng_nfd/shared \
-I$(SDKDIR)/components/ng_nfd \
-I$(SDKDIR)/components/standardlibrary/microc/include \
-I$(SDKDIR)/components/standardlibrary/microc/src \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/common/include \
-I$(SDKDIR)/components/flowenv/me/include \
-I$(SDKDIR)/components/flowenv/me/include/nfp6000 \
-I$(SDKDIR)/components/flowenv/me/lib \
-I$(SDKDIR)/components/flowenv/me/lib/nfp \
-I$(PIFOUTDIR)/ \
-I$(PIFOUTDIR)/callbackapi \
-I$(SDKDIR)/components/standardlibrary/include \
-FI$(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/include/config.h \
-Fo$(OUTDIR)/nfd_pcie0_notify.list/ \
-Fe$(OUTDIR)/nfd_pcie0_notify.list/nfd_pcie0_notify $(NFCC_FLAGS) \
$(SDKDIR)/components/flowenv/me/blocks/blm/libblm.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/pci_in/notify.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/utils/libutils.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/shared/nfd_cfg.c \
$(SDKDIR)/components/standardlibrary/microc/src/intrinsic.c \
$(SDKDIR)/components/standardlibrary/microc/src/rtl.c \
$(SDKDIR)/components/flowenv/me/lib/nfp/libnfp.c \
$(SDKDIR)/components/flowenv/me/lib/std/libstd.c \
$(SDKDIR)/components/flowenv/me/lib/pkt/libpkt.c \
$(SDKDIR)/components/flowenv/me/lib/pktdma/libpktdma.c \
$(SDKDIR)/components/flowenv/me/lib/net/libnet.c \
$(SDKDIR)/components/flowenv/me/lib/modscript/libmodscript.c
#
# NFD_PCIE0_PCI_IN_GATHER
#
$(OUTDIR)/nfd_pcie0_pci_in_gather.list/nfd_pcie0_pci_in_gather.list: $(SDKDIR)/components/flowenv/me/blocks/blm/libblm.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/pci_in_me0.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/utils/libutils.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/shared/nfd_cfg.c \
$(SDKDIR)/components/standardlibrary/microc/src/intrinsic.c \
$(SDKDIR)/components/standardlibrary/microc/src/rtl.c \
$(SDKDIR)/components/flowenv/me/lib/nfp/libnfp.c \
$(SDKDIR)/components/flowenv/me/lib/std/libstd.c \
$(SDKDIR)/components/flowenv/me/lib/pkt/libpkt.c \
$(SDKDIR)/components/flowenv/me/lib/pktdma/libpktdma.c \
$(SDKDIR)/components/flowenv/me/lib/net/libnet.c \
$(SDKDIR)/components/flowenv/me/lib/modscript/libmodscript.c \
$(PIFOUTDIR)/pif_design.h \
$(MAKEFILE_LIST)
@echo ---------
@echo compiling $@
@echo ---------
@mkdir -p $(OUTDIR)/nfd_pcie0_pci_in_gather.list
$(SDKTOOLSDIR)/nfcc -DPLATFORM_PORT_SELECTION=H_PLATFORM \
-DPIF_APP_CONFIG=PIF_APP_DEFAULT \
-DNUM_IMU=1 \
-DNUM_EMU=1 \
-DSIMULATION=0 \
-DPIF_APP_REDUCED_THREADS=1 \
-DPIF_DEBUG=1 \
-DNFD_IN_DATA_DMA_ME0="__nfp_idstr2meid(\"pcie0.me2\")" \
-DNFD_IN_DATA_DMA_ME1="__nfp_idstr2meid(\"pcie0.me3\")" \
-DNFD_OUT_CACHE_ME="__nfp_idstr2meid(\"pcie0.me0\")" \
-DPCIE_ISL=0 \
-chip nfp-4xxxc-b0 \
-W3 \
-Qno_decl_volatile \
-O2 \
-mIPOPT_nfp=2 \
-Zi \
-ng \
-Qnctx=8 \
-Qnctx_mode=8 \
-I$(SDKDIR)/components/flowenv/me/blocks/blm/_h \
-I$(SDKDIR)/components/flowenv/me/blocks \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/include \
-I$(SDKDIR)/components/ng_nfd/me/blocks \
-I$(SDKDIR)/components/ng_nfd/shared \
-I$(SDKDIR)/components/ng_nfd \
-I$(SDKDIR)/components/standardlibrary/microc/include \
-I$(SDKDIR)/components/standardlibrary/microc/src \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/common/include \
-I$(SDKDIR)/components/flowenv/me/include \
-I$(SDKDIR)/components/flowenv/me/include/nfp6000 \
-I$(SDKDIR)/components/flowenv/me/lib \
-I$(SDKDIR)/components/flowenv/me/lib/nfp \
-I$(PIFOUTDIR)/ \
-I$(PIFOUTDIR)/callbackapi \
-I$(SDKDIR)/components/standardlibrary/include \
-FI$(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/include/config.h \
-Fo$(OUTDIR)/nfd_pcie0_pci_in_gather.list/ \
-Fe$(OUTDIR)/nfd_pcie0_pci_in_gather.list/nfd_pcie0_pci_in_gather $(NFCC_FLAGS) \
$(SDKDIR)/components/flowenv/me/blocks/blm/libblm.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/pci_in_me0.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/utils/libutils.c \
$(SDKDIR)/components/ng_nfd/me/blocks/vnic/shared/nfd_cfg.c \
$(SDKDIR)/components/standardlibrary/microc/src/intrinsic.c \
$(SDKDIR)/components/standardlibrary/microc/src/rtl.c \
$(SDKDIR)/components/flowenv/me/lib/nfp/libnfp.c \
$(SDKDIR)/components/flowenv/me/lib/std/libstd.c \
$(SDKDIR)/components/flowenv/me/lib/pkt/libpkt.c \
$(SDKDIR)/components/flowenv/me/lib/pktdma/libpktdma.c \
$(SDKDIR)/components/flowenv/me/lib/net/libnet.c \
$(SDKDIR)/components/flowenv/me/lib/modscript/libmodscript.c
#
# FLOWCACHE_TIMEOUT_EMU0
#
$(OUTDIR)/flowcache_timeout_emu0.list/flowcache_timeout_emu0.list: $(SDKP4DIR)/components/nfp_pif/me/apps/common/src/fc.c \
$(SDKP4DIR)/components/nfp_pif/me/apps/common/src/dcfl_init.c \
$(SDKP4DIR)/components/nfp_pif/me/apps/common/src/system_init.c \
$(SDKP4DIR)/components/flowcache/me/lib/flowcache/_c/flow_cache_remove.c \
$(SDKP4DIR)/components/flowcache/me/lib/flowcache/_c/flow_cache_timeout.c \
$(SDKP4DIR)/components/flowcache/me/lib/flowcache/_c/flow_cache_timeout_lock.c \
$(SDKP4DIR)/components/flowcache/me/lib/flowcache/_c/flow_cache_timestamp.c \
$(SDKP4DIR)/components/flowcache/me/lib/standardlibrary/_c/cluster_target.c \
$(SDKP4DIR)/components/flowcache/me/lib/standardlibrary/_c/mem_atomic_indirect.c \
$(SDKP4DIR)/components/dcfl/me/lib/dcfl/libdcfl.c \
$(SDKDIR)/components/standardlibrary/microc/src/intrinsic.c \
$(SDKDIR)/components/standardlibrary/microc/src/rtl.c \
$(SDKDIR)/components/flowenv/me/lib/nfp/libnfp.c \
$(SDKDIR)/components/flowenv/me/lib/std/libstd.c \
$(SDKDIR)/components/flowenv/me/lib/pkt/libpkt.c \
$(SDKDIR)/components/flowenv/me/lib/pktdma/libpktdma.c \
$(SDKDIR)/components/flowenv/me/lib/net/libnet.c \
$(SDKDIR)/components/flowenv/me/lib/modscript/libmodscript.c \
$(PIFOUTDIR)/pif_design.h \
$(MAKEFILE_LIST)
@echo ---------
@echo compiling $@
@echo ---------
@mkdir -p $(OUTDIR)/flowcache_timeout_emu0.list
$(SDKTOOLSDIR)/nfcc -DPLATFORM_PORT_SELECTION=H_PLATFORM \
-DPIF_APP_CONFIG=PIF_APP_DEFAULT \
-DNUM_IMU=1 \
-DNUM_EMU=1 \
-DSIMULATION=0 \
-DPIF_APP_REDUCED_THREADS=1 \
-DPIF_DEBUG=1 \
-DFC_TIMEOUT_EMU=0 \
-chip nfp-4xxxc-b0 \
-W3 \
-Qno_decl_volatile \
-O2 \
-mIPOPT_nfp=2 \
-Zi \
-ng \
-Qnctx=8 \
-Qnctx_mode=8 \
-Qnn_mode=1 \
-Qspill=3 \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/common/include \
-I$(SDKP4DIR)/components/nfp_pif/shared/include \
-I$(SDKP4DIR)/components/flowcache/me/lib/flowcache \
-I$(SDKP4DIR)/components/flowcache/me/lib/standardlibrary \
-I$(SDKP4DIR)/components/dcfl/me/lib/dcfl \
-I$(SDKP4DIR)/components/dcfl/shared/include/dcfl \
-I$(SDKDIR)/components/standardlibrary/microc/include \
-I$(SDKDIR)/components/standardlibrary/microc/src \
-I$(SDKDIR)/components/flowenv/me/include \
-I$(SDKDIR)/components/flowenv/me/include/nfp6000 \
-I$(SDKDIR)/components/flowenv/me/lib \
-I$(SDKDIR)/components/flowenv/me/lib/nfp \
-I$(PIFOUTDIR)/ \
-I$(PIFOUTDIR)/callbackapi \
-I$(SDKDIR)/components/standardlibrary/include \
-FI$(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/include/config.h \
-Fo$(OUTDIR)/flowcache_timeout_emu0.list/ \
-Fe$(OUTDIR)/flowcache_timeout_emu0.list/flowcache_timeout_emu0 $(NFCC_FLAGS) \
$(SDKP4DIR)/components/nfp_pif/me/apps/common/src/fc.c \
$(SDKP4DIR)/components/nfp_pif/me/apps/common/src/dcfl_init.c \
$(SDKP4DIR)/components/nfp_pif/me/apps/common/src/system_init.c \
$(SDKP4DIR)/components/flowcache/me/lib/flowcache/_c/flow_cache_remove.c \
$(SDKP4DIR)/components/flowcache/me/lib/flowcache/_c/flow_cache_timeout.c \
$(SDKP4DIR)/components/flowcache/me/lib/flowcache/_c/flow_cache_timeout_lock.c \
$(SDKP4DIR)/components/flowcache/me/lib/flowcache/_c/flow_cache_timestamp.c \
$(SDKP4DIR)/components/flowcache/me/lib/standardlibrary/_c/cluster_target.c \
$(SDKP4DIR)/components/flowcache/me/lib/standardlibrary/_c/mem_atomic_indirect.c \
$(SDKP4DIR)/components/dcfl/me/lib/dcfl/libdcfl.c \
$(SDKDIR)/components/standardlibrary/microc/src/intrinsic.c \
$(SDKDIR)/components/standardlibrary/microc/src/rtl.c \
$(SDKDIR)/components/flowenv/me/lib/nfp/libnfp.c \
$(SDKDIR)/components/flowenv/me/lib/std/libstd.c \
$(SDKDIR)/components/flowenv/me/lib/pkt/libpkt.c \
$(SDKDIR)/components/flowenv/me/lib/pktdma/libpktdma.c \
$(SDKDIR)/components/flowenv/me/lib/net/libnet.c \
$(SDKDIR)/components/flowenv/me/lib/modscript/libmodscript.c
#
# NFD_PCIE0_SB
#
$(OUTDIR)/nfd_pcie0_sb.list/nfd_pcie0_sb.list: $(SDKDIR)/components/ng_nfd/me/blocks/vnic/pci_out_sb.uc \
$(PIFOUTDIR)/pif_design.h \
$(MAKEFILE_LIST)
@echo ---------
@echo assembling $@
@echo ---------
@mkdir -p $(OUTDIR)/nfd_pcie0_sb.list
$(SDKTOOLSDIR)/nfas -DPLATFORM_PORT_SELECTION=H_PLATFORM \
-DPIF_APP_CONFIG=PIF_APP_DEFAULT \
-DNUM_IMU=1 \
-DNUM_EMU=1 \
-DSIMULATION=0 \
-DPIF_APP_REDUCED_THREADS=1 \
-DPIF_DEBUG=1 \
-DNFD_CFG_SIG_NEXT_ME="_nfd_cfg_sig_svc_me0" \
-DPCIE_ISL=0 \
-DSTAGE_BATCH_MANAGER_CTX=0 \
-DSTAGE_BATCH_FIRST_WORKER=1 \
-DSTAGE_BATCH_NUM_WORKERS=7 \
-DNFD_OUT_SB_WQ_NUM=15 \
-DNFD_CFG_NEXT_ME="__nfp_idstr2meid(\"i48.me2\")" \
-chip nfp-4xxxc-b0 \
-go \
-t \
-W3 \
-R \
-lm 0 \
-C \
-Of \
-Os \
-O \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/include \
-I$(SDKDIR)/components/ng_nfd/me/blocks/vnic \
-I$(SDKDIR)/components/ng_nfd/me/blocks/vnic/shared \
-I$(SDKDIR)/components/ng_nfd/me/blocks \
-I$(SDKDIR)/components/ng_nfd/shared \
-I$(SDKP4DIR)/components/nfp_pif/me/apps/common/include \
-I$(SDKDIR)/components/standardlibrary/microcode/src \
-I$(SDKDIR)/components/standardlibrary/microcode/include \
-I$(PIFOUTDIR)/ \
-I$(SDKDIR)/components/standardlibrary/include \
-include $(SDKP4DIR)/components/nfp_pif/me/apps/pif_app_nfd/include/config.h \
-o $@ $(SDKDIR)/components/ng_nfd/me/blocks/vnic/pci_out_sb.uc
clean:
rm -f $(OUTDIR)/*.nffw $(OUTDIR)/*.elf \
$(OUTDIR)/*.mif $(OUTDIR)/*.mift \
$(OUTDIR)/*.uci $(OUTDIR)/*.ucp \
$(OUTDIR)/*.dbg
rm -rf $(OUTDIR)/nfd_pcie0_pd0.list
rm -rf $(OUTDIR)/nfd_pcie0_pci_in_issue1.list
rm -rf $(OUTDIR)/nfd_pcie0_pci_out_me0.list
rm -rf $(OUTDIR)/nbi_init_csr.list
rm -rf $(OUTDIR)/nfd_pcie0_pd1.list
rm -rf $(OUTDIR)/nfd_pcie0_pci_in_issue0.list
rm -rf $(OUTDIR)/gro1.list
rm -rf $(OUTDIR)/pif_app_nfd.list
rm -rf $(OUTDIR)/app_master.list
rm -rf $(OUTDIR)/nfd_svc.list
rm -rf $(OUTDIR)/blm0.list
rm -rf $(OUTDIR)/gro0.list
rm -rf $(OUTDIR)/nfd_pcie0_notify.list
rm -rf $(OUTDIR)/nfd_pcie0_pci_in_gather.list
rm -rf $(OUTDIR)/flowcache_timeout_emu0.list
rm -rf $(OUTDIR)/nfd_pcie0_sb.list
rm -f $(OUTDIR)/*.yml $(OUTDIR)/*.svg
rm -f $(PIFOUTDIR)/*.c $(PIFOUTDIR)/*.h $(PIFOUTDIR)/*.json \
$(PIFOUTDIR)/*.txt $(PIFOUTDIR)/*.svg $(PIFOUTDIR)/*.csv
rm -rf $(PIFOUTDIR)/callbackapi
...@@ -66,7 +66,7 @@ app.use(fileUpload()) ...@@ -66,7 +66,7 @@ app.use(fileUpload())
app.use('/serverless/chain', chainHandler.router); // chain router (explicit_chain_handler.js) for handling explicit chains app.use('/serverless/chain', chainHandler.router); // chain router (explicit_chain_handler.js) for handling explicit chains
let requestQueue = [] let requestQueue = []
const WINDOW_SIZE = 10 const WINDOW_SIZE = 1
const port = constants.master_port const port = constants.master_port
const registry_url = constants.registry_url const registry_url = constants.registry_url
...@@ -220,6 +220,7 @@ app.post('/serverless/execute/:id', (req, res) => { ...@@ -220,6 +220,7 @@ app.post('/serverless/execute/:id', (req, res) => {
res.timestamp = Date.now() res.timestamp = Date.now()
if (functionToResource.has(id)) { if (functionToResource.has(id)) {
res.start = 'warmstart' res.start = 'warmstart'
res.dispatch_time = Date.now()
libSupport.reverseProxy(req, res) libSupport.reverseProxy(req, res)
} else { } else {
res.start = 'coldstart' res.start = 'coldstart'
......
...@@ -77,6 +77,7 @@ function generateExecutor(functionPath, functionHash) { ...@@ -77,6 +77,7 @@ function generateExecutor(functionPath, functionHash) {
* @param {JSON} res Object to use to return the response to the user * @param {JSON} res Object to use to return the response to the user
*/ */
async function reverseProxy(req, res) { async function reverseProxy(req, res) {
res.reverse_ingress = Date.now()
if (req.headers['x-chain-type'] !== 'explicit' && req.body.type === "tcp") if (req.headers['x-chain-type'] !== 'explicit' && req.body.type === "tcp")
branchChainPredictor(req) branchChainPredictor(req)
let runtime = req.body.runtime let runtime = req.body.runtime
...@@ -93,8 +94,10 @@ async function reverseProxy(req, res) { ...@@ -93,8 +94,10 @@ async function reverseProxy(req, res) {
let url = `http://${resource.node_id}:${resource.port}/serverless/function/execute` let url = `http://${resource.node_id}:${resource.port}/serverless/function/execute`
// logger.info("Request received at reverseproxy. Forwarding to: " + url); // logger.info("Request received at reverseproxy. Forwarding to: " + url);
forwardTo.open_request_count += 1 // forwardTo.open_request_count += 1
heap.heapify(functionHeap, compare) // maintain loadbalancer by heapifying the Map // TODO: stopping loadbalancer
// heap.heapify(functionHeap, compare) // maintain loadbalancer by heapifying the Map
res.lookup_time = Date.now()
var options = { var options = {
method: 'POST', method: 'POST',
uri: url, uri: url,
...@@ -153,6 +156,7 @@ async function reverseProxy(req, res) { ...@@ -153,6 +156,7 @@ async function reverseProxy(req, res) {
let payload = req.body let payload = req.body
payload.request_id = request_id payload.request_id = request_id
let data = payload.data let data = payload.data
res.data_set_time = Date.now()
let packet = packPacket({ let packet = packPacket({
chain_id: 0, chain_id: 0,
exec_id: request_id, exec_id: request_id,
...@@ -160,8 +164,10 @@ async function reverseProxy(req, res) { ...@@ -160,8 +164,10 @@ async function reverseProxy(req, res) {
data, data,
function_count: 1 function_count: 1
}) })
res.pack_time = Date.now()
udpProxy.send(packet, 0, packet.length, resource.port, resource.node_id, function (err, bytes) { udpProxy.send(packet, 0, packet.length, resource.port, resource.node_id, function (err, bytes) {
// logger.info(`forwarded request via UDP, IP 192.168.2.5 Port ${resource.port}`) // logger.info(`forwarded request via UDP, IP 192.168.2.5 Port ${resource.port}`)
res.send_time = Date.now()
}) })
} }
} }
...@@ -415,6 +421,23 @@ udpProxy.on('message', (msg, rinfo) => { ...@@ -415,6 +421,23 @@ udpProxy.on('message', (msg, rinfo) => {
let result = unpackPacket(msg) let result = unpackPacket(msg)
let res = requestFlightQueue.get(result.exec_id) let res = requestFlightQueue.get(result.exec_id)
res.json(result) res.json(result)
console.log("resource_lookup",
res.dispatch_time - res.timestamp,
"reverse_proxy_call",
res.reverse_ingress - res.dispatch_time,
"metadata_lookup",
res.lookup_time - res.reverse_ingress,
"data_set_time",
res.data_set_time - res.lookup_time,
"pack_time",
res.pack_time - res.data_set_time,
"network_send",
res.send_time - res.pack_time,
"total_dispatch_delay",
res.send_time - res.timestamp,
"E2E time:",
Date.now() - res.timestamp
)
}); });
udpProxy.on('listening', () => { udpProxy.on('listening', () => {
...@@ -459,6 +482,7 @@ function packPacket(dataPacket) { ...@@ -459,6 +482,7 @@ function packPacket(dataPacket) {
let message = new Array(1024) let message = new Array(1024)
let base = 0, chain_id, exec_id, function_id, data, function_count let base = 0, chain_id, exec_id, function_id, data, function_count
let f0, f1, f2, f3, f4, t1, t2, t3, t4
chain_id = struct.PackTo(">I", message, base, [dataPacket.chain_id]) chain_id = struct.PackTo(">I", message, base, [dataPacket.chain_id])
base += 4 base += 4
exec_id = struct.PackTo(">I", message, base, [dataPacket.exec_id]) exec_id = struct.PackTo(">I", message, base, [dataPacket.exec_id])
...@@ -468,6 +492,27 @@ function packPacket(dataPacket) { ...@@ -468,6 +492,27 @@ function packPacket(dataPacket) {
data = struct.PackTo(">I", message, base, [dataPacket.data]) data = struct.PackTo(">I", message, base, [dataPacket.data])
base += 4 base += 4
function_count = struct.PackTo("B", message, base, [dataPacket.function_count]) function_count = struct.PackTo("B", message, base, [dataPacket.function_count])
base += 1
f0 = struct.PackTo("B", message, base, [0])
base += 1
f1 = struct.PackTo("B", message, base, [12])
base += 1
f2 = struct.PackTo("B", message, base, [0])
base += 1
f3 = struct.PackTo("B", message, base, [34])
base += 1
f4 = struct.PackTo("B", message, base, [0])
base += 1
t1 = struct.PackTo(">I", message, base, [Date.now()])
base += 4
t2 = struct.PackTo("I", message, base, [1234])
base += 4
t3 = struct.PackTo("I", message, base, [0])
base += 8
t4 = struct.PackTo("I", message, base, [0])
message = Buffer.from(message) message = Buffer.from(message)
return message return message
} }
......
# #
# Generated Makefile for echo # Generated Makefile for orchestrator
# #
ifndef SDKDIR ifndef SDKDIR
...@@ -122,7 +122,7 @@ ifneq ($(NFAS_FOUND),found) ...@@ -122,7 +122,7 @@ ifneq ($(NFAS_FOUND),found)
$(warning warning: nfas not found or not executable, on windows please run nfp4term.bat) $(warning warning: nfas not found or not executable, on windows please run nfp4term.bat)
endif endif
$(OUTDIR)/echo.nffw: $(OUTDIR)/nfd_pcie0_pd0.list/nfd_pcie0_pd0.list \ $(OUTDIR)/orchestrator.nffw: $(OUTDIR)/nfd_pcie0_pd0.list/nfd_pcie0_pd0.list \
$(OUTDIR)/nfd_pcie0_pci_in_issue1.list/nfd_pcie0_pci_in_issue1.list \ $(OUTDIR)/nfd_pcie0_pci_in_issue1.list/nfd_pcie0_pci_in_issue1.list \
$(OUTDIR)/nfd_pcie0_pci_out_me0.list/nfd_pcie0_pci_out_me0.list \ $(OUTDIR)/nfd_pcie0_pci_out_me0.list/nfd_pcie0_pci_out_me0.list \
$(OUTDIR)/nbi_init_csr.list/nbi_init_csr.list \ $(OUTDIR)/nbi_init_csr.list/nbi_init_csr.list \
...@@ -186,17 +186,17 @@ $(PIFOUTDIR)/build_info.json: $(MAKEFILE_LIST) ...@@ -186,17 +186,17 @@ $(PIFOUTDIR)/build_info.json: $(MAKEFILE_LIST)
# Generate IR from P4 # Generate IR from P4
# #
$(OUTDIR)/echo.yml: p4src/echo.p4 \ $(OUTDIR)/orchestrator.yml: p4src/orchestrator.p4 \
$(MAKEFILE_LIST) $(MAKEFILE_LIST)
@echo --------- @echo ---------
@echo compiling p4 $@ @echo compiling p4 $@
@echo --------- @echo ---------
@mkdir -p $(PIFOUTDIR) @mkdir -p $(PIFOUTDIR)
$(SDKP4DIR)/bin/nfp4c -o $(OUTDIR)/echo.yml \ $(SDKP4DIR)/bin/nfp4c -o $(OUTDIR)/orchestrator.yml \
--p4-version 16 \ --p4-version 16 \
--p4-compiler p4c-nfp \ --p4-compiler p4c-nfp \
--source_info \ --source_info \
p4src/echo.p4 p4src/orchestrator.p4
# #
...@@ -229,15 +229,16 @@ $(PIFOUTDIR)/pif_pkt_clone%h \ ...@@ -229,15 +229,16 @@ $(PIFOUTDIR)/pif_pkt_clone%h \
$(PIFOUTDIR)/pif_flcalc%c \ $(PIFOUTDIR)/pif_flcalc%c \
$(PIFOUTDIR)/pif_flcalc%h \ $(PIFOUTDIR)/pif_flcalc%h \
$(PIFOUTDIR)/pif_field_lists%h \ $(PIFOUTDIR)/pif_field_lists%h \
$(PIFOUTDIR)/pif_parrep_pvs_sync%c : $(OUTDIR)/echo%yml $(MAKEFILE_LIST) $(PIFOUTDIR)/pif_parrep_pvs_sync%c : $(OUTDIR)/orchestrator%yml $(MAKEFILE_LIST)
@echo --------- @echo ---------
@echo generating pif $@ @echo generating pif $@
@echo --------- @echo ---------
@mkdir -p $(PIFOUTDIR) @mkdir -p $(PIFOUTDIR)
$(SDKP4DIR)/bin/nfirc -o $(PIFOUTDIR)/ \ $(SDKP4DIR)/bin/nfirc -o $(PIFOUTDIR)/ \
--p4info $(OUTDIR)/echo.p4info.json \ --p4info $(OUTDIR)/orchestrator.p4info.json \
--debugpoints \ --debugpoints \
$(OUTDIR)/echo.yml --mac_ingress_timestamp \
$(OUTDIR)/orchestrator.yml
# #
......
#!/bin/bash -x #!/bin/bash -x
sudo ifconfig vf0_0 down
sudo ifconfig vf0_0 hw ether 00:11:11:11:11:11
sudo ifconfig vf0_1 down
sudo ifconfig vf0_1 hw ether 00:22:22:22:22:22
sudo ifconfig vf0_0 192.168.2.2/24 up sudo ifconfig vf0_0 192.168.2.2/24 up
sudo ifconfig vf0_1 192.168.2.3/24 up sudo ifconfig vf0_1 192.168.2.3/24 up
...@@ -7,17 +11,15 @@ sudo ifconfig vf0_1 192.168.2.3/24 up ...@@ -7,17 +11,15 @@ sudo ifconfig vf0_1 192.168.2.3/24 up
echo "y" | docker system prune echo "y" | docker system prune
docker network create -d macvlan --subnet=192.168.2.0/24 --aux-address="vf0_0=192.168.2.2" --aux-address="vf0_1=192.168.2.3" -o parent=vf0_1 pub_net docker network create -d macvlan --subnet=192.168.2.0/24 --aux-address="vf0_0=192.168.2.2" --aux-address="vf0_1=192.168.2.3" -o parent=vf0_1 pub_net
# move vf0_0 into its own namespace move vf0_0 into its own namespace
# sudo ip netns exec ns_server ip link set vf0_0 netns 1 sudo ip netns exec ns_server ip link set vf0_0 netns 1
# sudo ip netns delete ns_server sudo ip netns delete ns_server
# sudo ip netns add ns_server sudo ip netns add ns_server
# sudo ip link set vf0_0 netns ns_server sudo ip link set vf0_0 netns ns_server
# sudo ip netns exec ns_server ip addr add dev vf0_0 192.168.2.2/24 sudo ip netns exec ns_server ip addr add dev vf0_0 192.168.2.2/24
# sudo ip netns exec ns_server ip link set dev vf0_0 up sudo ip netns exec ns_server ip link set dev vf0_0 up
# sudo ip netns exec ns_server arp -s 192.168.2.3 00:22:22:22:22:22 -i vf0_0 sudo ip netns exec ns_server arp -s 192.168.2.3 00:22:22:22:22:22 -i vf0_0
# sudo ip netns exec ns_server arp -s 192.168.2.4 00:33:33:33:33:33 -i vf0_0
# sudo arp -s 192.168.2.2 00:11:11:11:11:11 -i vf0_1 sudo arp -s 192.168.2.2 00:11:11:11:11:11 -i vf0_1
# sudo arp -s 192.168.2.4 00:33:33:33:33:33 -i vf0_1
\ No newline at end of file
sudo ip netns delete ns_server
sudo ip netns delete ns_client
sudo ip netns add ns_server
sudo ip netns add ns_client
echo "namespace created"
sudo ifconfig vf0_0 down
sudo ifconfig vf0_0 hw ether 00:11:11:11:11:11
sudo ip link set vf0_0 up
sudo ip address add 192.168.2.2/24 dev vf0_0
sudo ethtool --offload vf0_0 rx off tx off sg off
sudo ethtool -K vf0_0 gso off
sudo ifconfig vf0_1 down
sudo ifconfig vf0_1 hw ether 00:22:22:22:22:22
sudo ip link set vf0_1 up
sudo ip address add 192.168.2.3/24 dev vf0_1
sudo ethtool --offload vf0_1 rx off tx off sg off
sudo ethtool -K vf0_1 gso off
echo "IPs assigned"
#sudo arp -s 192.168.2.3 00:22:22:22:22:22 -i vf0_0
#sudo arp -s 192.168.2.4 00:33:33:33:33:33 -i vf0_0
#sudo arp -s 192.168.2.2 00:11:11:11:11:11 -i vf0_1
#sudo arp -s 192.168.2.4 00:33:33:33:33:33 -i vf0_1
sudo ip link set vf0_0 netns ns_server
sudo ip netns exec ns_server ip addr add dev vf0_0 192.168.2.2/24
sudo ip netns exec ns_server ip link set dev vf0_0 up
sudo ip netns exec ns_server arp -s 192.168.2.3 00:22:22:22:22:22 -i vf0_0
sudo ip netns exec ns_server arp -s 192.168.2.4 00:33:33:33:33:33 -i vf0_0
sudo ip link set vf0_1 netns ns_client
sudo ip netns exec ns_client ip addr add dev vf0_1 192.168.2.3/24
sudo ip netns exec ns_client ip link set dev vf0_1 up
sudo ip netns exec ns_client arp -s 192.168.2.2 00:11:11:11:11:11 -i vf0_1
sudo ip netns exec ns_client arp -s 192.168.2.2 00:11:11:11:11:11 -i vf0_1
sudo ip netns exec ns_client arp -s 192.168.2.4 00:33:33:33:33:33 -i vf0_1
\ No newline at end of file
...@@ -15,7 +15,7 @@ done ...@@ -15,7 +15,7 @@ done
if [[ $compile_flag -eq 1 ]] if [[ $compile_flag -eq 1 ]]
then then
# compile the nfp code # compile the nfp code
sudo /opt/netronome/p4/bin/nfp4build -o ./p4src/echo.nffw -p ./p4src/out -4 ./p4src/echo.p4 -l lithium --nfp4c_p4_version 16 --nfp4c_p4_compiler p4c-nfp -c ./p4src/prime.c sudo /opt/netronome/p4/bin/nfp4build -o ./p4src/orchestrator.nffw -p ./p4src/out -4 ./p4src/orchestrator.p4 -l lithium --nfp4c_p4_version 16 --nfirc_mac_ingress_timestamp --nfp4c_p4_compiler p4c-nfp -c ./p4src/prime.c
fi fi
if [[ $offload_flag -eq 1 ]] if [[ $offload_flag -eq 1 ]]
...@@ -24,7 +24,7 @@ then ...@@ -24,7 +24,7 @@ then
cd /opt/netronome/p4/bin/ cd /opt/netronome/p4/bin/
# offload # offload
sudo ./rtecli design-load -f $location/p4src/echo.nffw -c $location/p4src/echo.p4cfg -p $location/p4src/out/pif_design.json sudo ./rtecli design-load -f $location/p4src/orchestrator.nffw -c $location/p4src/echo.p4cfg -p $location/p4src/out/pif_design.json
# returning back to base # returning back to base
cd $location cd $location
......
#! /bin/bash -ex
compile_flag=0
offload_flag=0
assign_ip_flag=0
location=$(pwd)
while getopts 'coi' flag; do
case "${flag}" in
c) compile_flag=1 ;;
o) offload_flag=1 ;;
i) assign_ip_flag=1 ;;
esac
done
if [[ $compile_flag -eq 1 ]]
then
# compile the nfp code
sudo /opt/netronome/p4/bin/nfp4build -o ./p4src/test.nffw -p ./p4src/out -4 ./p4src/test.p4 -l lithium --nfp4c_p4_version 16 --nfirc_mac_ingress_timestamp --nfp4c_p4_compiler p4c-nfp -e
fi
if [[ $offload_flag -eq 1 ]]
then
# move to p4 bin
cd /opt/netronome/p4/bin/
# offload
sudo ./rtecli design-load -f $location/p4src/test.nffw -c $location/p4src/test.p4cfg -p $location/p4src/out/pif_design.json
# returning back to base
cd $location
fi
if [[ $assign_ip_flag -eq 1 ]]
then
#assigning IPs to network interfaces
sudo ./assign_ip_test.sh
fi
...@@ -643,35 +643,9 @@ ...@@ -643,35 +643,9 @@
"source_fragment" : "dispatch_act" "source_fragment" : "dispatch_act"
} }
}, },
{
"name" : "act",
"id" : 4,
"runtime_data" : [],
"primitives" : [
{
"op" : "assign",
"parameters" : [
{
"type" : "field",
"value" : ["map_hdr", "data"]
},
{
"type" : "hexstr",
"value" : "0x00000064"
}
],
"source_info" : {
"filename" : "p4src/echo.p4",
"line" : 51,
"column" : 9,
"source_fragment" : "hdr.map_hdr.data = 32w100"
}
}
]
},
{ {
"name" : "fix_checksum", "name" : "fix_checksum",
"id" : 5, "id" : 4,
"runtime_data" : [], "runtime_data" : [],
"primitives" : [ "primitives" : [
{ {
...@@ -714,32 +688,9 @@ ...@@ -714,32 +688,9 @@
}, },
"init_table" : "node_2", "init_table" : "node_2",
"tables" : [ "tables" : [
{
"name" : "tbl_act",
"id" : 0,
"key" : [],
"match_type" : "exact",
"type" : "simple",
"max_size" : 1024,
"with_counters" : false,
"support_timeout" : false,
"direct_meters" : null,
"action_ids" : [4],
"actions" : ["act"],
"base_default_next" : "dispatch",
"next_tables" : {
"act" : "dispatch"
},
"default_entry" : {
"action_id" : 4,
"action_const" : true,
"action_data" : [],
"action_entry_const" : true
}
},
{ {
"name" : "dispatch", "name" : "dispatch",
"id" : 1, "id" : 0,
"source_info" : { "source_info" : {
"filename" : "p4src/echo.p4", "filename" : "p4src/echo.p4",
"line" : 40, "line" : 40,
...@@ -775,7 +726,7 @@ ...@@ -775,7 +726,7 @@
}, },
{ {
"name" : "fwd", "name" : "fwd",
"id" : 2, "id" : 1,
"source_info" : { "source_info" : {
"filename" : "p4src/echo.p4", "filename" : "p4src/echo.p4",
"line" : 16, "line" : 16,
...@@ -811,7 +762,7 @@ ...@@ -811,7 +762,7 @@
}, },
{ {
"name" : "fwd", "name" : "fwd",
"id" : 3, "id" : 2,
"source_info" : { "source_info" : {
"filename" : "p4src/echo.p4", "filename" : "p4src/echo.p4",
"line" : 16, "line" : 16,
...@@ -888,7 +839,7 @@ ...@@ -888,7 +839,7 @@
} }
} }
}, },
"true_next" : "tbl_act", "true_next" : "dispatch",
"false_next" : "fwd" "false_next" : "fwd"
} }
] ]
...@@ -906,7 +857,7 @@ ...@@ -906,7 +857,7 @@
"tables" : [ "tables" : [
{ {
"name" : "tbl_fix_checksum", "name" : "tbl_fix_checksum",
"id" : 4, "id" : 3,
"key" : [], "key" : [],
"match_type" : "exact", "match_type" : "exact",
"type" : "simple", "type" : "simple",
...@@ -914,14 +865,14 @@ ...@@ -914,14 +865,14 @@
"with_counters" : false, "with_counters" : false,
"support_timeout" : false, "support_timeout" : false,
"direct_meters" : null, "direct_meters" : null,
"action_ids" : [5], "action_ids" : [4],
"actions" : ["fix_checksum"], "actions" : ["fix_checksum"],
"base_default_next" : null, "base_default_next" : null,
"next_tables" : { "next_tables" : {
"fix_checksum" : null "fix_checksum" : null
}, },
"default_entry" : { "default_entry" : {
"action_id" : 5, "action_id" : 4,
"action_const" : true, "action_const" : true,
"action_data" : [], "action_data" : [],
"action_entry_const" : true "action_entry_const" : true
......
...@@ -227,12 +227,6 @@ egress::fix_checksum: ...@@ -227,12 +227,6 @@ egress::fix_checksum:
src_lineno: 75 src_lineno: 75
type: action type: action
ingress::act:
implementation: modify_field(map_hdr.data, 0x00000064);
src_filename: ''
src_lineno: 1
type: action
ingress::dispatch_act: ingress::dispatch_act:
implementation: |- implementation: |-
modify_field(ipv4.dstAddr, dstAddr); modify_field(ipv4.dstAddr, dstAddr);
...@@ -290,17 +284,6 @@ ingress::fwd: ...@@ -290,17 +284,6 @@ ingress::fwd:
src_lineno: 16 src_lineno: 16
type: table type: table
ingress::tbl_act:
allowed_actions:
- ingress::act
default_entry:
action: ingress::act
const: true
max_entries: 1025
src_filename: ''
src_lineno: 1
type: table
########################################## ##########################################
# Ingress conditionals sets # # Ingress conditionals sets #
...@@ -324,9 +307,8 @@ ingress_flow: ...@@ -324,9 +307,8 @@ ingress_flow:
implementation: |- implementation: |-
digraph { digraph {
"_condition_0" -> "ingress::fwd" [condition = false] "_condition_0" -> "ingress::fwd" [condition = false]
"_condition_0" -> "ingress::tbl_act" [condition = true] "_condition_0" -> "ingress::dispatch" [condition = true]
"ingress::fwd" -> "exit_control_flow" [action = always] "ingress::fwd" -> "exit_control_flow" [action = always]
"ingress::tbl_act" -> "ingress::dispatch" [action = always]
"ingress::dispatch" -> "ingress::fwd" [action = always] "ingress::dispatch" -> "ingress::fwd" [action = always]
} }
start_state: _condition_0 start_state: _condition_0
...@@ -379,7 +361,7 @@ layout: ...@@ -379,7 +361,7 @@ layout:
########################################## ##########################################
source_info: source_info:
date: 2021/03/04 18:32:12 date: 2021/03/19 14:57:28
output_file: p4src/echo.yml output_file: p4src/echo.yml
p4_version: '16' p4_version: '16'
source_files: source_files:
......
#define REPLY_PORT 9000 #define REPLY_PORT 9000
#define DISPATCHER_PORT 8000 #define DISPATCHER_PORT 8000
#define MDS_PORT 8000
#define NUM_CACHE 128 #define NUM_CACHE 128
#define CLUSTER_COUNT 2 #define CLUSTER_COUNT 2
#define DEAD_EGRESS_PORT 9 #define DEAD_EGRESS_PORT 9
#define CONTROLLER_IP 0x0a000002 #define CONTROLLER_IP 0xc0a80203
#define SERVER_IP 0x0a000001 #define SERVER_IP 0xc0a80202
#define NC_READ_REQUEST 0 #define NC_READ_REQUEST 0
#define NC_READ_REPLY 1 #define NC_READ_REPLY 1
...@@ -16,8 +17,8 @@ ...@@ -16,8 +17,8 @@
#define PKT_INSTANCE_TYPE_NORMAL 0 #define PKT_INSTANCE_TYPE_NORMAL 0
#define PKT_INSTANCE_TYPE_INGRESS_CLONE 1 #define PKT_INSTANCE_TYPE_INGRESS_CLONE 1
#define PKT_INSTANCE_TYPE_EGRESS_CLONE 2 #define PKT_INSTANCE_TYPE_EGRESS_CLONE 9
#define PKT_INSTANCE_TYPE_COALESCED 3 #define PKT_INSTANCE_TYPE_COALESCED 10
#define PKT_INSTANCE_TYPE_INGRESS_RECIRC 4 #define PKT_INSTANCE_TYPE_INGRESS_RECIRC 3
#define PKT_INSTANCE_TYPE_REPLICATION 5 #define PKT_INSTANCE_TYPE_REPLICATION 5
#define PKT_INSTANCE_TYPE_RESUBMIT 6 #define PKT_INSTANCE_TYPE_RESUBMIT 4
\ No newline at end of file \ No newline at end of file
struct resubmit_meta_t {
bit<8> current_state;
bit<32> data;
}
struct ingress_metadata_t {
bit<1> drop;
bit<9> egress_port;
bit<4> packet_type;
}
register< bit<8>>(16384) current_state;
register< bit<8>>(16384) dispatch_state;
header ethernet_t {
bit<48> dstAddr;
bit<48> srcAddr;
bit<16> etherType;
}
header ipv4_t {
bit<4> version;
bit<4> ihl;
bit<8> diffserv;
bit<16> totalLen;
bit<16> identification;
bit<3> flags;
bit<13> fragOffset;
bit<8> ttl;
bit<8> protocol;
bit<16> hdrChecksum;
bit<32> srcAddr;
bit<32> dstAddr;
}
header udp_t {
bit<16> srcPort;
bit<16> dstPort;
bit<16> length_;
bit<16> checksum;
}
header map_hdr_t {
bit<32> chain_id;
bit<32> exec_id;
bit<8> function_id;
bit<32> data;
bit<8> function_count;
bit<8> f0;
bit<8> f1;
bit<8> f2;
bit<8> f3;
bit<8> f4;
}
struct exec_hdr_t {
bit<8> function_count;
bit<8> function;
}
struct metadata {
@name(".ing_metadata")
ingress_metadata_t ing_metadata;
@name(".resubmit_meta")
resubmit_meta_t resubmit_meta;
@name(".exec_hdr")
exec_hdr_t exec_hdr;
}
struct headers {
@name(".ethernet")
ethernet_t ethernet;
@name(".ipv4")
ipv4_t ipv4;
@name(".udp")
udp_t udp;
@name(".map_hdr")
map_hdr_t map_hdr;
}
\ No newline at end of file
{
"program" : "p4src/orchestrator.p4",
"__meta__" : {
"version" : [2, 7],
"compiler" : "https://github.com/p4lang/p4c"
},
"header_types" : [
{
"name" : "scalars_0",
"id" : 0,
"fields" : []
},
{
"name" : "ethernet_t",
"id" : 1,
"fields" : [
["dstAddr", 48, false],
["srcAddr", 48, false],
["etherType", 16, false]
]
},
{
"name" : "ipv4_t",
"id" : 2,
"fields" : [
["version", 4, false],
["ihl", 4, false],
["diffserv", 8, false],
["totalLen", 16, false],
["identification", 16, false],
["flags", 3, false],
["fragOffset", 13, false],
["ttl", 8, false],
["protocol", 8, false],
["hdrChecksum", 16, false],
["srcAddr", 32, false],
["dstAddr", 32, false]
]
},
{
"name" : "udp_t",
"id" : 3,
"fields" : [
["srcPort", 16, false],
["dstPort", 16, false],
["length_", 16, false],
["checksum", 16, false]
]
},
{
"name" : "map_hdr_t",
"id" : 4,
"fields" : [
["chain_id", 32, false],
["exec_id", 32, false],
["function_id", 32, false],
["data", 32, false],
["function_count", 8, false],
["f0", 8, false],
["f1", 8, false],
["f2", 8, false],
["f3", 8, false],
["f4", 8, false]
]
},
{
"name" : "ingress_metadata_t",
"id" : 5,
"fields" : [
["drop", 1, false],
["egress_port", 9, false],
["packet_type", 4, false],
["_padding", 2, false]
]
},
{
"name" : "resubmit_meta_t",
"id" : 6,
"fields" : [
["current_state", 8, false],
["data", 32, false]
]
},
{
"name" : "exec_hdr_t",
"id" : 7,
"fields" : [
["function_count", 8, false],
["function", 8, false]
]
},
{
"name" : "standard_metadata",
"id" : 8,
"fields" : [
["ingress_port", 16, false],
["packet_length", 14, false],
["egress_spec", 16, false],
["egress_port", 16, false],
["egress_instance", 10, false],
["instance_type", 4, false],
["clone_spec", 32, false],
["parser_error_location", 8, false],
["parser_status", 3, false],
["checksum_error", 1, false]
]
}
],
"headers" : [
{
"name" : "scalars",
"id" : 0,
"header_type" : "scalars_0",
"metadata" : true,
"pi_omit" : true
},
{
"name" : "standard_metadata",
"id" : 1,
"header_type" : "standard_metadata",
"metadata" : true,
"pi_omit" : true
},
{
"name" : "ethernet",
"id" : 2,
"header_type" : "ethernet_t",
"metadata" : false,
"pi_omit" : true
},
{
"name" : "ipv4",
"id" : 3,
"header_type" : "ipv4_t",
"metadata" : false,
"pi_omit" : true
},
{
"name" : "udp",
"id" : 4,
"header_type" : "udp_t",
"metadata" : false,
"pi_omit" : true
},
{
"name" : "map_hdr",
"id" : 5,
"header_type" : "map_hdr_t",
"metadata" : false,
"pi_omit" : true
},
{
"name" : "ing_metadata",
"id" : 6,
"header_type" : "ingress_metadata_t",
"metadata" : true,
"pi_omit" : true
},
{
"name" : "resubmit_meta",
"id" : 7,
"header_type" : "resubmit_meta_t",
"metadata" : true,
"pi_omit" : true
},
{
"name" : "exec_hdr",
"id" : 8,
"header_type" : "exec_hdr_t",
"metadata" : true,
"pi_omit" : true
}
],
"header_stacks" : [],
"header_union_types" : [],
"header_unions" : [],
"header_union_stacks" : [],
"field_lists" : [],
"errors" : [
["NoError", 1],
["PacketTooShort", 2],
["NoMatch", 3],
["StackOutOfBounds", 4],
["HeaderTooShort", 5],
["ParserTimeout", 6]
],
"enums" : [],
"parsers" : [
{
"name" : "parser",
"id" : 0,
"init_state" : "start",
"parse_states" : [
{
"name" : "parse_ipv4",
"id" : 0,
"parser_ops" : [
{
"parameters" : [
{
"type" : "regular",
"value" : "ipv4"
}
],
"op" : "extract"
}
],
"transitions" : [
{
"value" : "0x00000511",
"mask" : "0x00000fff",
"next_state" : "parse_udp"
},
{
"value" : "default",
"mask" : null,
"next_state" : null
}
],
"transition_key" : [
{
"type" : "field",
"value" : ["ipv4", "fragOffset"]
},
{
"type" : "field",
"value" : ["ipv4", "ihl"]
},
{
"type" : "field",
"value" : ["ipv4", "protocol"]
}
],
"source_info" : {
"filename" : "p4src/includes/parsers.p4",
"line" : 3,
"column" : 31,
"source_fragment" : "parse_ipv4"
}
},
{
"name" : "parse_udp",
"id" : 1,
"parser_ops" : [
{
"parameters" : [
{
"type" : "regular",
"value" : "udp"
}
],
"op" : "extract"
}
],
"transitions" : [
{
"value" : "0x1f40",
"mask" : null,
"next_state" : "parse_map_hdr"
},
{
"value" : "0x2328",
"mask" : null,
"next_state" : "parse_map_hdr"
},
{
"value" : "default",
"mask" : null,
"next_state" : null
}
],
"transition_key" : [
{
"type" : "field",
"value" : ["udp", "dstPort"]
}
],
"source_info" : {
"filename" : "p4src/includes/parsers.p4",
"line" : 11,
"column" : 30,
"source_fragment" : "parse_udp"
}
},
{
"name" : "parse_map_hdr",
"id" : 2,
"parser_ops" : [
{
"parameters" : [
{
"type" : "regular",
"value" : "map_hdr"
}
],
"op" : "extract"
}
],
"transitions" : [
{
"value" : "default",
"mask" : null,
"next_state" : null
}
],
"transition_key" : [],
"source_info" : {
"filename" : "p4src/includes/parsers.p4",
"line" : 20,
"column" : 34,
"source_fragment" : "parse_map_hdr"
}
},
{
"name" : "start",
"id" : 3,
"parser_ops" : [
{
"parameters" : [
{
"type" : "regular",
"value" : "ethernet"
}
],
"op" : "extract"
}
],
"transitions" : [
{
"value" : "0x0800",
"mask" : null,
"next_state" : "parse_ipv4"
},
{
"value" : "default",
"mask" : null,
"next_state" : null
}
],
"transition_key" : [
{
"type" : "field",
"value" : ["ethernet", "etherType"]
}
],
"source_info" : {
"filename" : "p4src/includes/parsers.p4",
"line" : 25,
"column" : 26,
"source_fragment" : "start"
}
}
]
}
],
"deparsers" : [
{
"name" : "deparser",
"id" : 0,
"source_info" : {
"filename" : "p4src/orchestrator.p4",
"line" : 79,
"column" : 8,
"source_fragment" : "DeparserImpl"
},
"order" : ["ethernet", "ipv4", "udp", "map_hdr"]
}
],
"meter_arrays" : [],
"counter_arrays" : [],
"register_arrays" : [
{
"name" : "current_state",
"id" : 0,
"source_info" : {
"filename" : "p4src/includes/headers.p4",
"line" : 12,
"column" : 25,
"source_fragment" : "current_state"
},
"size" : 16384,
"bitwidth" : 8
},
{
"name" : "dispatch_state",
"id" : 1,
"source_info" : {
"filename" : "p4src/includes/headers.p4",
"line" : 13,
"column" : 25,
"source_fragment" : "dispatch_state"
},
"size" : 16384,
"bitwidth" : 8
}
],
"calculations" : [
{
"name" : "calc",
"id" : 0,
"source_info" : {
"filename" : "p4src/orchestrator.p4",
"line" : 90,
"column" : 8,
"source_fragment" : "verify_checksum( ..."
},
"algo" : "csum16",
"input" : [
{
"type" : "field",
"value" : ["ipv4", "version"]
},
{
"type" : "field",
"value" : ["ipv4", "ihl"]
},
{
"type" : "field",
"value" : ["ipv4", "diffserv"]
},
{
"type" : "field",
"value" : ["ipv4", "totalLen"]
},
{
"type" : "field",
"value" : ["ipv4", "identification"]
},
{
"type" : "field",
"value" : ["ipv4", "flags"]
},
{
"type" : "field",
"value" : ["ipv4", "fragOffset"]
},
{
"type" : "field",
"value" : ["ipv4", "ttl"]
},
{
"type" : "field",
"value" : ["ipv4", "protocol"]
},
{
"type" : "field",
"value" : ["ipv4", "srcAddr"]
},
{
"type" : "field",
"value" : ["ipv4", "dstAddr"]
}
],
"output_width" : 16
},
{
"name" : "calc_0",
"id" : 1,
"source_info" : {
"filename" : "p4src/orchestrator.p4",
"line" : 110,
"column" : 8,
"source_fragment" : "update_checksum( ..."
},
"algo" : "csum16",
"input" : [
{
"type" : "field",
"value" : ["ipv4", "version"]
},
{
"type" : "field",
"value" : ["ipv4", "ihl"]
},
{
"type" : "field",
"value" : ["ipv4", "diffserv"]
},
{
"type" : "field",
"value" : ["ipv4", "totalLen"]
},
{
"type" : "field",
"value" : ["ipv4", "identification"]
},
{
"type" : "field",
"value" : ["ipv4", "flags"]
},
{
"type" : "field",
"value" : ["ipv4", "fragOffset"]
},
{
"type" : "field",
"value" : ["ipv4", "ttl"]
},
{
"type" : "field",
"value" : ["ipv4", "protocol"]
},
{
"type" : "field",
"value" : ["ipv4", "srcAddr"]
},
{
"type" : "field",
"value" : ["ipv4", "dstAddr"]
}
],
"output_width" : 16
}
],
"learn_lists" : [],
"actions" : [
{
"name" : "NoAction",
"id" : 0,
"runtime_data" : [],
"primitives" : [],
"source_info" : {
"filename" : "/opt/netronome/p4/include/16/p4include/core.p4",
"line" : 68,
"column" : 7,
"source_fragment" : "NoAction"
}
},
{
"name" : "NoAction",
"id" : 1,
"runtime_data" : [],
"primitives" : [],
"source_info" : {
"filename" : "/opt/netronome/p4/include/16/p4include/core.p4",
"line" : 68,
"column" : 7,
"source_fragment" : "NoAction"
}
},
{
"name" : "fwd_act",
"id" : 2,
"runtime_data" : [
{
"name" : "port",
"bitwidth" : 16
}
],
"primitives" : [
{
"op" : "assign",
"parameters" : [
{
"type" : "field",
"value" : ["standard_metadata", "egress_spec"]
},
{
"type" : "runtime_data",
"value" : 0
}
],
"source_info" : {
"filename" : "p4src/orchestrator.p4",
"line" : 13,
"column" : 8,
"source_fragment" : "standard_metadata.egress_spec = port"
}
}
],
"source_info" : {
"filename" : "p4src/orchestrator.p4",
"line" : 12,
"column" : 29,
"source_fragment" : "fwd_act"
}
},
{
"name" : "dispatch_act",
"id" : 3,
"runtime_data" : [
{
"name" : "dstAddr",
"bitwidth" : 32
},
{
"name" : "dstPort",
"bitwidth" : 16
},
{
"name" : "ethernetAddr",
"bitwidth" : 48
},
{
"name" : "egress_port",
"bitwidth" : 16
}
],
"primitives" : [
{
"op" : "assign",
"parameters" : [
{
"type" : "field",
"value" : ["ipv4", "dstAddr"]
},
{
"type" : "runtime_data",
"value" : 0
}
],
"source_info" : {
"filename" : "p4src/orchestrator.p4",
"line" : 26,
"column" : 8,
"source_fragment" : "hdr.ipv4.dstAddr = dstAddr"
}
},
{
"op" : "assign",
"parameters" : [
{
"type" : "field",
"value" : ["udp", "dstPort"]
},
{
"type" : "runtime_data",
"value" : 1
}
],
"source_info" : {
"filename" : "p4src/orchestrator.p4",
"line" : 27,
"column" : 8,
"source_fragment" : "hdr.udp.dstPort = dstPort"
}
},
{
"op" : "assign",
"parameters" : [
{
"type" : "field",
"value" : ["ethernet", "dstAddr"]
},
{
"type" : "runtime_data",
"value" : 2
}
],
"source_info" : {
"filename" : "p4src/orchestrator.p4",
"line" : 28,
"column" : 8,
"source_fragment" : "hdr.ethernet.dstAddr = ethernetAddr"
}
}
],
"source_info" : {
"filename" : "p4src/orchestrator.p4",
"line" : 25,
"column" : 34,
"source_fragment" : "dispatch_act"
}
},
{
"name" : "fix_checksum",
"id" : 4,
"runtime_data" : [],
"primitives" : [
{
"op" : "assign",
"parameters" : [
{
"type" : "field",
"value" : ["udp", "checksum"]
},
{
"type" : "hexstr",
"value" : "0x0000"
}
],
"source_info" : {
"filename" : "p4src/orchestrator.p4",
"line" : 67,
"column" : 8,
"source_fragment" : "hdr.udp.checksum = 16w0"
}
}
],
"source_info" : {
"filename" : "p4src/orchestrator.p4",
"line" : 66,
"column" : 33,
"source_fragment" : "fix_checksum"
}
}
],
"pipelines" : [
{
"name" : "ingress",
"id" : 0,
"source_info" : {
"filename" : "p4src/orchestrator.p4",
"line" : 10,
"column" : 8,
"source_fragment" : "ingress"
},
"init_table" : "node_2",
"tables" : [
{
"name" : "dispatch",
"id" : 0,
"source_info" : {
"filename" : "p4src/orchestrator.p4",
"line" : 31,
"column" : 29,
"source_fragment" : "dispatch"
},
"key" : [
{
"match_type" : "exact",
"target" : ["map_hdr", "function_id"],
"mask" : null
}
],
"match_type" : "exact",
"type" : "simple",
"max_size" : 1024,
"with_counters" : false,
"support_timeout" : false,
"direct_meters" : null,
"action_ids" : [3, 1],
"actions" : ["dispatch_act", "NoAction"],
"base_default_next" : "fwd",
"next_tables" : {
"dispatch_act" : "fwd",
"NoAction" : "fwd"
},
"default_entry" : {
"action_id" : 1,
"action_const" : false,
"action_data" : [],
"action_entry_const" : false
}
},
{
"name" : "fwd",
"id" : 1,
"source_info" : {
"filename" : "p4src/orchestrator.p4",
"line" : 16,
"column" : 24,
"source_fragment" : "fwd"
},
"key" : [
{
"match_type" : "exact",
"target" : ["standard_metadata", "ingress_port"],
"mask" : null
}
],
"match_type" : "exact",
"type" : "simple",
"max_size" : 1024,
"with_counters" : false,
"support_timeout" : false,
"direct_meters" : null,
"action_ids" : [2, 0],
"actions" : ["fwd_act", "NoAction"],
"base_default_next" : null,
"next_tables" : {
"fwd_act" : null,
"NoAction" : null
},
"default_entry" : {
"action_id" : 0,
"action_const" : false,
"action_data" : [],
"action_entry_const" : false
}
},
{
"name" : "fwd",
"id" : 2,
"source_info" : {
"filename" : "p4src/orchestrator.p4",
"line" : 16,
"column" : 24,
"source_fragment" : "fwd"
},
"key" : [
{
"match_type" : "exact",
"target" : ["standard_metadata", "ingress_port"],
"mask" : null
}
],
"match_type" : "exact",
"type" : "simple",
"max_size" : 1024,
"with_counters" : false,
"support_timeout" : false,
"direct_meters" : null,
"action_ids" : [2, 0],
"actions" : ["fwd_act", "NoAction"],
"base_default_next" : null,
"next_tables" : {
"fwd_act" : null,
"NoAction" : null
},
"default_entry" : {
"action_id" : 0,
"action_const" : false,
"action_data" : [],
"action_entry_const" : false
}
}
],
"action_profiles" : [],
"conditionals" : [
{
"name" : "node_2",
"id" : 0,
"source_info" : {
"filename" : "p4src/orchestrator.p4",
"line" : 41,
"column" : 12,
"source_fragment" : "hdr.ipv4.isValid() && hdr.udp.dstPort == 8000"
},
"expression" : {
"type" : "expression",
"value" : {
"op" : "and",
"left" : {
"type" : "expression",
"value" : {
"op" : "d2b",
"left" : null,
"right" : {
"type" : "field",
"value" : ["ipv4", "$valid$"]
}
}
},
"right" : {
"type" : "expression",
"value" : {
"op" : "==",
"left" : {
"type" : "field",
"value" : ["udp", "dstPort"]
},
"right" : {
"type" : "hexstr",
"value" : "0x1f40"
}
}
}
}
},
"true_next" : "dispatch",
"false_next" : "fwd"
}
]
},
{
"name" : "egress",
"id" : 1,
"source_info" : {
"filename" : "p4src/orchestrator.p4",
"line" : 51,
"column" : 8,
"source_fragment" : "egress"
},
"init_table" : "tbl_fix_checksum",
"tables" : [
{
"name" : "tbl_fix_checksum",
"id" : 3,
"key" : [],
"match_type" : "exact",
"type" : "simple",
"max_size" : 1024,
"with_counters" : false,
"support_timeout" : false,
"direct_meters" : null,
"action_ids" : [4],
"actions" : ["fix_checksum"],
"base_default_next" : null,
"next_tables" : {
"fix_checksum" : null
},
"default_entry" : {
"action_id" : 4,
"action_const" : true,
"action_data" : [],
"action_entry_const" : true
}
}
],
"action_profiles" : [],
"conditionals" : []
}
],
"checksums" : [
{
"name" : "cksum",
"id" : 0,
"target" : ["ipv4", "hdrChecksum"],
"calculation" : "calc",
"verify" : true,
"if_cond" : {
"type" : "expression",
"value" : {
"op" : "d2b",
"left" : null,
"right" : {
"type" : "field",
"value" : ["ipv4", "$valid$"]
}
}
},
"type" : "generic"
},
{
"name" : "cksum_0",
"id" : 1,
"target" : ["ipv4", "hdrChecksum"],
"calculation" : "calc_0",
"verify" : false,
"if_cond" : {
"type" : "expression",
"value" : {
"op" : "d2b",
"left" : null,
"right" : {
"type" : "field",
"value" : ["ipv4", "$valid$"]
}
}
},
"type" : "generic"
}
],
"force_arith" : [],
"extern_instances" : [],
"extern_function_instances" : [],
"field_aliases" : [],
"flow_variables" : []
}
\ No newline at end of file
...@@ -25,16 +25,7 @@ control ingress(inout headers hdr, inout metadata meta, inout standard_metadata_ ...@@ -25,16 +25,7 @@ control ingress(inout headers hdr, inout metadata meta, inout standard_metadata_
@name(".dispatch_act") action dispatch_act(bit<32> dstAddr, bit<16> dstPort, bit<48> ethernetAddr , bit<16> egress_port) { @name(".dispatch_act") action dispatch_act(bit<32> dstAddr, bit<16> dstPort, bit<48> ethernetAddr , bit<16> egress_port) {
hdr.ipv4.dstAddr = dstAddr; hdr.ipv4.dstAddr = dstAddr;
hdr.udp.dstPort = dstPort; hdr.udp.dstPort = dstPort;
// hdr.ethernet.dstAddr = ethernetAddr; hdr.ethernet.dstAddr = ethernetAddr;
// standard_metadata.egress_spec = egress_port;
// bit<48> tempEth = hdr.ethernet.dstAddr;
// hdr.ethernet.dstAddr = hdr.ethernet.srcAddr;
// hdr.ethernet.srcAddr = tempEth;
// standard_metadata.egress_spec = standard_metadata.ingress_port;
// hdr.ipv4.ttl = hdr.ipv4.ttl - 8w1;
} }
@name(".dispatch") table dispatch { @name(".dispatch") table dispatch {
...@@ -48,7 +39,7 @@ control ingress(inout headers hdr, inout metadata meta, inout standard_metadata_ ...@@ -48,7 +39,7 @@ control ingress(inout headers hdr, inout metadata meta, inout standard_metadata_
apply { apply {
if (hdr.ipv4.isValid() && hdr.udp.dstPort == DISPATCHER_PORT) { if (hdr.ipv4.isValid() && hdr.udp.dstPort == DISPATCHER_PORT) {
hdr.map_hdr.data = 32w100;
dispatch.apply(); dispatch.apply();
fwd.apply(); fwd.apply();
} else { } else {
......
{
"tables": [
{
"preamble": {
"id": 33595533,
"name": "fwd",
"alias": "fwd"
},
"matchFields": [
{
"id": 1,
"name": "standard_metadata.ingress_port",
"bitwidth": 16,
"matchType": "EXACT"
}
],
"actionRefs": [
{
"id": 16805069
},
{
"id": 16800567,
"annotations": [
"@defaultonly()"
]
}
],
"size": "1024"
},
{
"preamble": {
"id": 33612818,
"name": "dispatch",
"alias": "dispatch"
},
"matchFields": [
{
"id": 1,
"name": "map_hdr.function_id",
"bitwidth": 32,
"matchType": "EXACT"
}
],
"actionRefs": [
{
"id": 16786857
},
{
"id": 16800567,
"annotations": [
"@defaultonly()"
]
}
],
"size": "1024"
}
],
"actions": [
{
"preamble": {
"id": 16800567,
"name": "NoAction",
"alias": "NoAction"
}
},
{
"preamble": {
"id": 16805069,
"name": "fwd_act",
"alias": "fwd_act"
},
"params": [
{
"id": 1,
"name": "port",
"bitwidth": 16
}
]
},
{
"preamble": {
"id": 16786857,
"name": "dispatch_act",
"alias": "dispatch_act"
},
"params": [
{
"id": 1,
"name": "dstAddr",
"bitwidth": 32
},
{
"id": 2,
"name": "dstPort",
"bitwidth": 16
},
{
"id": 3,
"name": "ethernetAddr",
"bitwidth": 48
},
{
"id": 4,
"name": "egress_port",
"bitwidth": 16
}
]
},
{
"preamble": {
"id": 16841338,
"name": "fix_checksum",
"alias": "fix_checksum"
}
}
]
}
##########################################
# Header instance definitions #
##########################################
errors:
type: enum
values:
- NoError: 1
- PacketTooShort: 2
- NoMatch: 3
- StackOutOfBounds: 4
- HeaderTooShort: 5
- ParserTimeout: 6
ethernet:
fields:
- dstAddr: 48
- srcAddr: 48
- etherType: 16
type: header
exec_hdr:
fields:
- function_count: 8
- function: 8
type: metadata
ing_metadata:
fields:
- drop: 1
- egress_port: 9
- packet_type: 4
- _padding: 2
type: metadata
ipv4:
calculated_fields:
- condition: valid(ipv4)
field: hdrChecksum
func: calc
type: verify
- condition: valid(ipv4)
field: hdrChecksum
func: calc_0
type: update
fields:
- version: 4
- ihl: 4
- diffserv: 8
- totalLen: 16
- identification: 16
- flags: 3
- fragOffset: 13
- ttl: 8
- protocol: 8
- hdrChecksum: 16
- srcAddr: 32
- dstAddr: 32
type: header
map_hdr:
fields:
- chain_id: 32
- exec_id: 32
- function_id: 32
- data: 32
- function_count: 8
- f0: 8
- f1: 8
- f2: 8
- f3: 8
- f4: 8
type: header
resubmit_meta:
fields:
- current_state: 8
- data: 32
type: metadata
standard_metadata:
fields:
- ingress_port: 16
- packet_length: 14
- egress_spec: 16
- egress_port: 16
- egress_instance: 10
- instance_type: 4
- clone_spec: 32
- parser_error_location: 8
- parser_status: 3
- checksum_error: 1
type: metadata
udp:
fields:
- srcPort: 16
- dstPort: 16
- length_: 16
- checksum: 16
type: header
##########################################
# Register definitions #
##########################################
current_state:
class: global
fields:
- value: 8
instance_count: 16384
type: register
dispatch_state:
class: global
fields:
- value: 8
instance_count: 16384
type: register
##########################################
# Field list definitions #
##########################################
field_list_1:
fields:
- ipv4.version
- ipv4.ihl
- ipv4.diffserv
- ipv4.totalLen
- ipv4.identification
- ipv4.flags
- ipv4.fragOffset
- ipv4.ttl
- ipv4.protocol
- ipv4.srcAddr
- ipv4.dstAddr
type: field_list
##########################################
# Field list calculations #
##########################################
calc:
algorithm: csum16
inputs:
- field_list_1
output_width: 16
type: field_list_calculation
calc_0:
algorithm: csum16
inputs:
- field_list_1
output_width: 16
type: field_list_calculation
##########################################
# Parse states #
##########################################
parse_ipv4:
implementation: extract(ipv4);
select_value:
- ipv4.fragOffset
- ipv4.ihl
- ipv4.protocol
src_filename: p4src/includes/parsers.p4
src_lineno: 3
type: parse_state
parse_map_hdr:
implementation: extract(map_hdr);
src_filename: p4src/includes/parsers.p4
src_lineno: 20
type: parse_state
parse_udp:
implementation: extract(udp);
select_value:
- udp.dstPort
src_filename: p4src/includes/parsers.p4
src_lineno: 11
type: parse_state
start:
implementation: extract(ethernet);
select_value:
- ethernet.etherType
src_filename: p4src/includes/parsers.p4
src_lineno: 25
type: parse_state
##########################################
# Parser #
##########################################
parser:
format: dot
implementation: |-
digraph {
start -> parse_ipv4 [value="0x0800", mask="none", order="0"]
start -> exit [value="default", mask="none", order="1"]
parse_ipv4 -> parse_udp [value="0x00000511", mask="0x00000fff", order="0"]
parse_ipv4 -> exit [value="default", mask="none", order="1"]
parse_udp -> parse_map_hdr [value="0x1f40", mask="none", order="0"]
parse_udp -> parse_map_hdr [value="0x2328", mask="none", order="1"]
parse_udp -> exit [value="default", mask="none", order="2"]
parse_map_hdr -> exit [value="default", mask="none", order="0"]
}
start_state: start
type: parser
##########################################
# Action sets #
##########################################
egress::fix_checksum:
implementation: modify_field(udp.checksum, 0x0000);
src_filename: p4src/orchestrator.p4
src_lineno: 66
type: action
ingress::dispatch_act:
implementation: |-
modify_field(ipv4.dstAddr, dstAddr);
modify_field(udp.dstPort, dstPort);
modify_field(ethernet.dstAddr, ethernetAddr);
parameter_list:
- dstAddr: 32
- dstPort: 16
- ethernetAddr: 48
- egress_port: 16
src_filename: p4src/orchestrator.p4
src_lineno: 25
type: action
ingress::fwd_act:
implementation: modify_field(standard_metadata.egress_spec, port);
parameter_list:
- port: 16
src_filename: p4src/orchestrator.p4
src_lineno: 12
type: action
##########################################
# Ingress and Egress tables #
##########################################
egress::tbl_fix_checksum:
allowed_actions:
- egress::fix_checksum
default_entry:
action: egress::fix_checksum
const: true
max_entries: 1025
src_filename: ''
src_lineno: 1
type: table
ingress::dispatch:
allowed_actions:
- ingress::dispatch_act
match_on:
map_hdr.function_id: exact
max_entries: 1025
src_filename: p4src/orchestrator.p4
src_lineno: 31
type: table
ingress::fwd:
allowed_actions:
- ingress::fwd_act
match_on:
standard_metadata.ingress_port: exact
max_entries: 1025
src_filename: p4src/orchestrator.p4
src_lineno: 16
type: table
##########################################
# Ingress conditionals sets #
##########################################
_condition_0:
condition: (((valid(ipv4))) and (((udp.dstPort) == (8000))))
format: bracketed_expr
src_filename: p4src/orchestrator.p4
src_lineno: 41
type: conditional
##########################################
# Ingress control flow #
##########################################
ingress_flow:
doc: control flow for ingress
format: dot
implementation: |-
digraph {
"_condition_0" -> "ingress::fwd" [condition = false]
"_condition_0" -> "ingress::dispatch" [condition = true]
"ingress::fwd" -> "exit_control_flow" [action = always]
"ingress::dispatch" -> "ingress::fwd" [action = always]
}
start_state: _condition_0
type: control_flow
##########################################
# Egress control flow #
##########################################
egress_flow:
doc: control flow for egress
format: dot
implementation: |-
digraph {
"egress::tbl_fix_checksum" -> "exit_control_flow" [action = always]
}
start_state: egress::tbl_fix_checksum
type: control_flow
##########################################
# Deparsers #
##########################################
deparser:
order:
- ethernet
- ipv4
- udp
- map_hdr
type: deparser
##########################################
# Processor layout #
##########################################
layout:
format: list
implementation:
- parser
- ingress
- egress
type: processor_layout
##########################################
# Source info #
##########################################
source_info:
date: 2021/04/23 22:03:40
output_file: p4src/orchestrator.yml
p4_version: '16'
source_files:
- p4src/orchestrator.p4
- ''
- /opt/netronome/p4/include/16/p4include/core.p4
type: source_info
{ {
"program" : "test.p4", "program" : "p4src/test.p4",
"__meta__" : { "__meta__" : {
"version" : [2, 7], "version" : [2, 7],
"compiler" : "https://github.com/p4lang/p4c" "compiler" : "https://github.com/p4lang/p4c"
...@@ -9,8 +9,7 @@ ...@@ -9,8 +9,7 @@
"name" : "scalars_0", "name" : "scalars_0",
"id" : 0, "id" : 0,
"fields" : [ "fields" : [
["chain_state", 8, false], ["chain_state", 8, false]
["chain_state_2", 8, false]
] ]
}, },
{ {
...@@ -181,6 +180,228 @@ ...@@ -181,6 +180,228 @@
"field_lists" : [ "field_lists" : [
{ {
"id" : 0, "id" : 0,
"name" : "fl",
"elements" : [
{
"type" : "field",
"value" : ["standard_metadata", "ingress_port"]
},
{
"type" : "field",
"value" : ["standard_metadata", "packet_length"]
},
{
"type" : "field",
"value" : ["standard_metadata", "egress_spec"]
},
{
"type" : "field",
"value" : ["standard_metadata", "egress_port"]
},
{
"type" : "field",
"value" : ["standard_metadata", "egress_instance"]
},
{
"type" : "field",
"value" : ["standard_metadata", "instance_type"]
},
{
"type" : "field",
"value" : ["standard_metadata", "clone_spec"]
},
{
"type" : "field",
"value" : ["standard_metadata", "parser_error_location"]
},
{
"type" : "field",
"value" : ["standard_metadata", "parser_status"]
},
{
"type" : "field",
"value" : ["standard_metadata", "checksum_error"]
},
{
"type" : "field",
"value" : ["ing_metadata", "drop"]
},
{
"type" : "field",
"value" : ["ing_metadata", "egress_port"]
},
{
"type" : "field",
"value" : ["ing_metadata", "packet_type"]
},
{
"type" : "field",
"value" : ["resubmit_meta", "current_state"]
},
{
"type" : "field",
"value" : ["resubmit_meta", "data"]
},
{
"type" : "field",
"value" : ["exec_hdr", "function_count"]
},
{
"type" : "field",
"value" : ["exec_hdr", "function"]
}
]
},
{
"id" : 1,
"name" : "fl_0",
"elements" : [
{
"type" : "field",
"value" : ["standard_metadata", "ingress_port"]
},
{
"type" : "field",
"value" : ["standard_metadata", "packet_length"]
},
{
"type" : "field",
"value" : ["standard_metadata", "egress_spec"]
},
{
"type" : "field",
"value" : ["standard_metadata", "egress_port"]
},
{
"type" : "field",
"value" : ["standard_metadata", "egress_instance"]
},
{
"type" : "field",
"value" : ["standard_metadata", "instance_type"]
},
{
"type" : "field",
"value" : ["standard_metadata", "clone_spec"]
},
{
"type" : "field",
"value" : ["standard_metadata", "parser_error_location"]
},
{
"type" : "field",
"value" : ["standard_metadata", "parser_status"]
},
{
"type" : "field",
"value" : ["standard_metadata", "checksum_error"]
},
{
"type" : "field",
"value" : ["ing_metadata", "drop"]
},
{
"type" : "field",
"value" : ["ing_metadata", "egress_port"]
},
{
"type" : "field",
"value" : ["ing_metadata", "packet_type"]
},
{
"type" : "field",
"value" : ["resubmit_meta", "current_state"]
},
{
"type" : "field",
"value" : ["resubmit_meta", "data"]
},
{
"type" : "field",
"value" : ["exec_hdr", "function_count"]
},
{
"type" : "field",
"value" : ["exec_hdr", "function"]
}
]
},
{
"id" : 2,
"name" : "fl_1",
"elements" : [
{
"type" : "field",
"value" : ["standard_metadata", "ingress_port"]
},
{
"type" : "field",
"value" : ["standard_metadata", "packet_length"]
},
{
"type" : "field",
"value" : ["standard_metadata", "egress_spec"]
},
{
"type" : "field",
"value" : ["standard_metadata", "egress_port"]
},
{
"type" : "field",
"value" : ["standard_metadata", "egress_instance"]
},
{
"type" : "field",
"value" : ["standard_metadata", "instance_type"]
},
{
"type" : "field",
"value" : ["standard_metadata", "clone_spec"]
},
{
"type" : "field",
"value" : ["standard_metadata", "parser_error_location"]
},
{
"type" : "field",
"value" : ["standard_metadata", "parser_status"]
},
{
"type" : "field",
"value" : ["standard_metadata", "checksum_error"]
},
{
"type" : "field",
"value" : ["ing_metadata", "drop"]
},
{
"type" : "field",
"value" : ["ing_metadata", "egress_port"]
},
{
"type" : "field",
"value" : ["ing_metadata", "packet_type"]
},
{
"type" : "field",
"value" : ["resubmit_meta", "current_state"]
},
{
"type" : "field",
"value" : ["resubmit_meta", "data"]
},
{
"type" : "field",
"value" : ["exec_hdr", "function_count"]
},
{
"type" : "field",
"value" : ["exec_hdr", "function"]
}
]
},
{
"id" : 3,
"name" : "tuple_0", "name" : "tuple_0",
"elements" : [ "elements" : [
{ {
...@@ -310,7 +531,7 @@ ...@@ -310,7 +531,7 @@
} }
], ],
"source_info" : { "source_info" : {
"filename" : "includes/parsers.p4", "filename" : "p4src/includes/parsers.p4",
"line" : 3, "line" : 3,
"column" : 31, "column" : 31,
"source_fragment" : "parse_ipv4" "source_fragment" : "parse_ipv4"
...@@ -332,7 +553,7 @@ ...@@ -332,7 +553,7 @@
], ],
"transitions" : [ "transitions" : [
{ {
"value" : "0x22b9", "value" : "0x1f40",
"mask" : null, "mask" : null,
"next_state" : "parse_map_hdr" "next_state" : "parse_map_hdr"
}, },
...@@ -354,7 +575,7 @@ ...@@ -354,7 +575,7 @@
} }
], ],
"source_info" : { "source_info" : {
"filename" : "includes/parsers.p4", "filename" : "p4src/includes/parsers.p4",
"line" : 11, "line" : 11,
"column" : 30, "column" : 30,
"source_fragment" : "parse_udp" "source_fragment" : "parse_udp"
...@@ -383,7 +604,7 @@ ...@@ -383,7 +604,7 @@
], ],
"transition_key" : [], "transition_key" : [],
"source_info" : { "source_info" : {
"filename" : "includes/parsers.p4", "filename" : "p4src/includes/parsers.p4",
"line" : 20, "line" : 20,
"column" : 34, "column" : 34,
"source_fragment" : "parse_map_hdr" "source_fragment" : "parse_map_hdr"
...@@ -422,7 +643,7 @@ ...@@ -422,7 +643,7 @@
} }
], ],
"source_info" : { "source_info" : {
"filename" : "includes/parsers.p4", "filename" : "p4src/includes/parsers.p4",
"line" : 25, "line" : 25,
"column" : 26, "column" : 26,
"source_fragment" : "start" "source_fragment" : "start"
...@@ -436,8 +657,8 @@ ...@@ -436,8 +657,8 @@
"name" : "deparser", "name" : "deparser",
"id" : 0, "id" : 0,
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 167, "line" : 185,
"column" : 8, "column" : 8,
"source_fragment" : "DeparserImpl" "source_fragment" : "DeparserImpl"
}, },
...@@ -451,7 +672,7 @@ ...@@ -451,7 +672,7 @@
"name" : "current_state", "name" : "current_state",
"id" : 0, "id" : 0,
"source_info" : { "source_info" : {
"filename" : "includes/headers.p4", "filename" : "p4src/includes/headers_test.p4",
"line" : 12, "line" : 12,
"column" : 25, "column" : 25,
"source_fragment" : "current_state" "source_fragment" : "current_state"
...@@ -463,7 +684,7 @@ ...@@ -463,7 +684,7 @@
"name" : "dispatch_state", "name" : "dispatch_state",
"id" : 1, "id" : 1,
"source_info" : { "source_info" : {
"filename" : "includes/headers.p4", "filename" : "p4src/includes/headers_test.p4",
"line" : 13, "line" : 13,
"column" : 25, "column" : 25,
"source_fragment" : "dispatch_state" "source_fragment" : "dispatch_state"
...@@ -477,8 +698,8 @@ ...@@ -477,8 +698,8 @@
"name" : "calc", "name" : "calc",
"id" : 0, "id" : 0,
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 178, "line" : 196,
"column" : 8, "column" : 8,
"source_fragment" : "verify_checksum( ..." "source_fragment" : "verify_checksum( ..."
}, },
...@@ -535,8 +756,8 @@ ...@@ -535,8 +756,8 @@
"name" : "calc_0", "name" : "calc_0",
"id" : 1, "id" : 1,
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 198, "line" : 216,
"column" : 8, "column" : 8,
"source_fragment" : "update_checksum( ..." "source_fragment" : "update_checksum( ..."
}, },
...@@ -627,7 +848,7 @@ ...@@ -627,7 +848,7 @@
} }
], ],
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 13, "line" : 13,
"column" : 8, "column" : 8,
"source_fragment" : "hdr.udp.checksum = 16w0" "source_fragment" : "hdr.udp.checksum = 16w0"
...@@ -646,7 +867,7 @@ ...@@ -646,7 +867,7 @@
} }
], ],
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 14, "line" : 14,
"column" : 8, "column" : 8,
"source_fragment" : "standard_metadata.egress_spec = egress_spec" "source_fragment" : "standard_metadata.egress_spec = egress_spec"
...@@ -688,7 +909,7 @@ ...@@ -688,7 +909,7 @@
} }
], ],
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 15, "line" : 15,
"column" : 8, "column" : 8,
"source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 8w1" "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 8w1"
...@@ -696,7 +917,7 @@ ...@@ -696,7 +917,7 @@
} }
], ],
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 12, "line" : 12,
"column" : 32, "column" : 32,
"source_fragment" : "set_egress" "source_fragment" : "set_egress"
...@@ -720,7 +941,7 @@ ...@@ -720,7 +941,7 @@
} }
], ],
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 31, "line" : 31,
"column" : 20, "column" : 20,
"source_fragment" : "meta.resubmit_meta.data = hdr.map_hdr.data" "source_fragment" : "meta.resubmit_meta.data = hdr.map_hdr.data"
...@@ -739,7 +960,7 @@ ...@@ -739,7 +960,7 @@
} }
], ],
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 32, "line" : 32,
"column" : 20, "column" : 20,
"source_fragment" : "meta.resubmit_meta.current_state = 8w0" "source_fragment" : "meta.resubmit_meta.current_state = 8w0"
...@@ -769,7 +990,7 @@ ...@@ -769,7 +990,7 @@
} }
], ],
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 39, "line" : 39,
"column" : 20, "column" : 20,
"source_fragment" : "current_state.read(chain_state, index)" "source_fragment" : "current_state.read(chain_state, index)"
...@@ -821,7 +1042,7 @@ ...@@ -821,7 +1042,7 @@
} }
], ],
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 40, "line" : 40,
"column" : 20, "column" : 20,
"source_fragment" : "chain_state = chain_state | (8w1 << hdr.map_hdr.function_id)" "source_fragment" : "chain_state = chain_state | (8w1 << hdr.map_hdr.function_id)"
...@@ -844,7 +1065,7 @@ ...@@ -844,7 +1065,7 @@
} }
], ],
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 41, "line" : 41,
"column" : 20, "column" : 20,
"source_fragment" : "current_state.write(index, chain_state)" "source_fragment" : "current_state.write(index, chain_state)"
...@@ -853,68 +1074,185 @@ ...@@ -853,68 +1074,185 @@
] ]
}, },
{ {
"name" : "recirculate_packet", "name" : "act_1",
"id" : 4, "id" : 4,
"runtime_data" : [], "runtime_data" : [],
"primitives" : [ "primitives" : [
{ {
"op" : "recirculate", "op" : "assign",
"parameters" : [ "parameters" : [
{ {
"type" : "field",
"value" : ["map_hdr", "data"]
},
{
"type" : "expression",
"value" : {
"type" : "expression",
"value" : {
"op" : "&",
"left" : {
"type" : "field",
"value" : ["scalars", "chain_state"]
},
"right" : {
"type" : "hexstr", "type" : "hexstr",
"value" : "0x0" "value" : "0xffffffff"
}
}
} }
]
} }
], ],
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 71, "line" : 43,
"column" : 40, "column" : 16,
"source_fragment" : "recirculate_packet" "source_fragment" : "hdr.map_hdr.data = (bit<32>)chain_state"
} }
}, },
{
"name" : "update_packet",
"id" : 5,
"runtime_data" : [],
"primitives" : [
{ {
"op" : "assign", "op" : "assign",
"parameters" : [ "parameters" : [
{ {
"type" : "field", "type" : "field",
"value" : ["udp", "dstPort"] "value" : ["standard_metadata", "egress_spec"]
}, },
{ {
"type" : "hexstr", "type" : "field",
"value" : "0x22b9" "value" : ["standard_metadata", "ingress_port"]
} }
], ],
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 76, "line" : 45,
"column" : 8, "column" : 16,
"source_fragment" : "hdr.udp.dstPort = 8889" "source_fragment" : "standard_metadata.egress_spec = standard_metadata.ingress_port"
}
}
]
},
{
"name" : "clone_packet",
"id" : 5,
"runtime_data" : [],
"primitives" : [
{
"op" : "clone_egress_pkt_to_egress",
"parameters" : [
{
"type" : "hexstr",
"value" : "0x00000004"
},
{
"type" : "hexstr",
"value" : "0x0"
}
]
}
],
"source_info" : {
"filename" : "p4src/test.p4",
"line" : 72,
"column" : 34,
"source_fragment" : "clone_packet"
}
},
{
"name" : "clone_packet",
"id" : 6,
"runtime_data" : [],
"primitives" : [
{
"op" : "clone_egress_pkt_to_egress",
"parameters" : [
{
"type" : "hexstr",
"value" : "0x00000003"
},
{
"type" : "hexstr",
"value" : "0x1"
}
]
}
],
"source_info" : {
"filename" : "p4src/test.p4",
"line" : 76,
"column" : 34,
"source_fragment" : "clone_packet2"
}
},
{
"name" : "clone_packet",
"id" : 7,
"runtime_data" : [],
"primitives" : [
{
"op" : "clone_egress_pkt_to_egress",
"parameters" : [
{
"type" : "hexstr",
"value" : "0x00000002"
},
{
"type" : "hexstr",
"value" : "0x2"
}
]
}
],
"source_info" : {
"filename" : "p4src/test.p4",
"line" : 80,
"column" : 34,
"source_fragment" : "clone_packet3"
}
},
{
"name" : "recirculate_packet",
"id" : 8,
"runtime_data" : [],
"primitives" : [
{
"op" : "recirculate",
"parameters" : [
{
"type" : "hexstr",
"value" : "0x3"
}
]
}
],
"source_info" : {
"filename" : "p4src/test.p4",
"line" : 84,
"column" : 40,
"source_fragment" : "recirculate_packet"
} }
}, },
{
"name" : "update_packet",
"id" : 9,
"runtime_data" : [],
"primitives" : [
{ {
"op" : "assign", "op" : "assign",
"parameters" : [ "parameters" : [
{ {
"type" : "field", "type" : "field",
"value" : ["udp", "srcPort"] "value" : ["udp", "dstPort"]
}, },
{ {
"type" : "hexstr", "type" : "hexstr",
"value" : "0x2328" "value" : "0x1f40"
} }
], ],
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 77, "line" : 89,
"column" : 8, "column" : 8,
"source_fragment" : "hdr.udp.srcPort = 9000" "source_fragment" : "hdr.udp.dstPort = 8000"
} }
}, },
{ {
...@@ -922,18 +1260,18 @@ ...@@ -922,18 +1260,18 @@
"parameters" : [ "parameters" : [
{ {
"type" : "field", "type" : "field",
"value" : ["ipv4", "dstAddr"] "value" : ["udp", "srcPort"]
}, },
{ {
"type" : "hexstr", "type" : "hexstr",
"value" : "0x0a000002" "value" : "0x2328"
} }
], ],
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 78, "line" : 90,
"column" : 8, "column" : 8,
"source_fragment" : "hdr.ipv4.dstAddr = 0x0a000002" "source_fragment" : "hdr.udp.srcPort = 9000"
} }
}, },
{ {
...@@ -941,18 +1279,18 @@ ...@@ -941,18 +1279,18 @@
"parameters" : [ "parameters" : [
{ {
"type" : "field", "type" : "field",
"value" : ["ipv4", "srcAddr"] "value" : ["ipv4", "dstAddr"]
}, },
{ {
"type" : "hexstr", "type" : "hexstr",
"value" : "0x0a000001" "value" : "0xc0a80202"
} }
], ],
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 79, "line" : 91,
"column" : 8, "column" : 8,
"source_fragment" : "hdr.ipv4.srcAddr = 0x0a000001" "source_fragment" : "hdr.ipv4.dstAddr = 0xc0a80202"
} }
}, },
{ {
...@@ -960,31 +1298,31 @@ ...@@ -960,31 +1298,31 @@
"parameters" : [ "parameters" : [
{ {
"type" : "field", "type" : "field",
"value" : ["standard_metadata", "egress_port"] "value" : ["standard_metadata", "egress_spec"]
}, },
{ {
"type" : "hexstr", "type" : "field",
"value" : "0x0004" "value" : ["standard_metadata", "ingress_port"]
} }
], ],
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 80, "line" : 93,
"column" : 8, "column" : 8,
"source_fragment" : "standard_metadata.egress_port = 4" "source_fragment" : "standard_metadata.egress_spec = standard_metadata.ingress_port"
} }
} }
], ],
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 75, "line" : 88,
"column" : 35, "column" : 35,
"source_fragment" : "update_packet" "source_fragment" : "update_packet"
} }
}, },
{ {
"name" : "act_1", "name" : "act_2",
"id" : 6, "id" : 10,
"runtime_data" : [], "runtime_data" : [],
"primitives" : [ "primitives" : [
{ {
...@@ -1000,17 +1338,36 @@ ...@@ -1000,17 +1338,36 @@
} }
], ],
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 100, "line" : 112,
"column" : 16, "column" : 16,
"source_fragment" : "meta.exec_hdr.function_count = hdr.map_hdr.function_count" "source_fragment" : "meta.exec_hdr.function_count = hdr.map_hdr.function_count"
} }
},
{
"op" : "assign",
"parameters" : [
{
"type" : "field",
"value" : ["map_hdr", "function_id"]
},
{
"type" : "field",
"value" : ["map_hdr", "function_count"]
}
],
"source_info" : {
"filename" : "p4src/test.p4",
"line" : 113,
"column" : 16,
"source_fragment" : "hdr.map_hdr.function_id = hdr.map_hdr.function_count"
}
} }
] ]
}, },
{ {
"name" : "act_2", "name" : "act_3",
"id" : 7, "id" : 11,
"runtime_data" : [], "runtime_data" : [],
"primitives" : [ "primitives" : [
{ {
...@@ -1036,7 +1393,7 @@ ...@@ -1036,7 +1393,7 @@
}, },
"right" : { "right" : {
"type" : "hexstr", "type" : "hexstr",
"value" : "0xfe" "value" : "0xff"
} }
} }
}, },
...@@ -1049,10 +1406,10 @@ ...@@ -1049,10 +1406,10 @@
} }
], ],
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 103, "line" : 116,
"column" : 16, "column" : 16,
"source_fragment" : "meta.exec_hdr.function_count = meta.exec_hdr.function_count - 8w2" "source_fragment" : "meta.exec_hdr.function_count = meta.exec_hdr.function_count - 8w1"
} }
}, },
{ {
...@@ -1068,8 +1425,8 @@ ...@@ -1068,8 +1425,8 @@
} }
], ],
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 104, "line" : 117,
"column" : 16, "column" : 16,
"source_fragment" : "hdr.map_hdr.function_id = meta.exec_hdr.function_count" "source_fragment" : "hdr.map_hdr.function_id = meta.exec_hdr.function_count"
} }
...@@ -1077,8 +1434,8 @@ ...@@ -1077,8 +1434,8 @@
] ]
}, },
{ {
"name" : "act_3", "name" : "act_4",
"id" : 8, "id" : 12,
"runtime_data" : [], "runtime_data" : [],
"primitives" : [ "primitives" : [
{ {
...@@ -1089,51 +1446,41 @@ ...@@ -1089,51 +1446,41 @@
"value" : ["map_hdr", "data"] "value" : ["map_hdr", "data"]
}, },
{ {
"type" : "expression",
"value" : {
"type" : "expression",
"value" : {
"op" : "&",
"left" : {
"type" : "field",
"value" : ["standard_metadata", "instance_type"]
},
"right" : {
"type" : "hexstr", "type" : "hexstr",
"value" : "0xffffffff" "value" : "0x00000001"
}
}
}
} }
], ],
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 107, "line" : 130,
"column" : 12, "column" : 16,
"source_fragment" : "hdr.map_hdr.data = (bit<32>)standard_metadata.instance_type" "source_fragment" : "hdr.map_hdr.data = 32w1"
} }
}
]
}, },
{ {
"op" : "register_read", "name" : "act_5",
"id" : 13,
"runtime_data" : [],
"primitives" : [
{
"op" : "assign",
"parameters" : [ "parameters" : [
{ {
"type" : "field", "type" : "field",
"value" : ["scalars", "chain_state_2"] "value" : ["map_hdr", "data"]
},
{
"type" : "register_array",
"value" : "current_state"
}, },
{ {
"type" : "field", "type" : "hexstr",
"value" : ["map_hdr", "exec_id"] "value" : "0x00000002"
} }
], ],
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 118, "line" : 132,
"column" : 16, "column" : 16,
"source_fragment" : "current_state.read(chain_state, hdr.map_hdr.exec_id)" "source_fragment" : "hdr.map_hdr.data = 32w2"
} }
} }
] ]
...@@ -1144,7 +1491,7 @@ ...@@ -1144,7 +1491,7 @@
"name" : "ingress", "name" : "ingress",
"id" : 0, "id" : 0,
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 9, "line" : 9,
"column" : 8, "column" : 8,
"source_fragment" : "ingress" "source_fragment" : "ingress"
...@@ -1178,7 +1525,7 @@ ...@@ -1178,7 +1525,7 @@
"name" : "ipv4_route", "name" : "ipv4_route",
"id" : 1, "id" : 1,
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 17, "line" : 17,
"column" : 31, "column" : 31,
"source_fragment" : "fwd" "source_fragment" : "fwd"
...@@ -1222,9 +1569,9 @@ ...@@ -1222,9 +1569,9 @@
"direct_meters" : null, "direct_meters" : null,
"action_ids" : [3], "action_ids" : [3],
"actions" : ["act_0"], "actions" : ["act_0"],
"base_default_next" : "ipv4_route", "base_default_next" : "tbl_act_1",
"next_tables" : { "next_tables" : {
"act_0" : "ipv4_route" "act_0" : "tbl_act_1"
}, },
"default_entry" : { "default_entry" : {
"action_id" : 3, "action_id" : 3,
...@@ -1234,10 +1581,69 @@ ...@@ -1234,10 +1581,69 @@
} }
}, },
{ {
"name" : "ipv4_route", "name" : "tbl_act_1",
"id" : 3, "id" : 3,
"key" : [],
"match_type" : "exact",
"type" : "simple",
"max_size" : 1024,
"with_counters" : false,
"support_timeout" : false,
"direct_meters" : null,
"action_ids" : [4],
"actions" : ["act_1"],
"base_default_next" : null,
"next_tables" : {
"act_1" : null
},
"default_entry" : {
"action_id" : 4,
"action_const" : true,
"action_data" : [],
"action_entry_const" : true
}
},
{
"name" : "ipv4_route",
"id" : 4,
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 17,
"column" : 31,
"source_fragment" : "fwd"
},
"key" : [
{
"match_type" : "exact",
"target" : ["standard_metadata", "ingress_port"],
"mask" : null
}
],
"match_type" : "exact",
"type" : "simple",
"max_size" : 8192,
"with_counters" : false,
"support_timeout" : false,
"direct_meters" : null,
"action_ids" : [1, 0],
"actions" : ["set_egress", "NoAction"],
"base_default_next" : null,
"next_tables" : {
"set_egress" : null,
"NoAction" : null
},
"default_entry" : {
"action_id" : 0,
"action_const" : false,
"action_data" : [],
"action_entry_const" : false
}
},
{
"name" : "ipv4_route",
"id" : 5,
"source_info" : {
"filename" : "p4src/test.p4",
"line" : 17, "line" : 17,
"column" : 31, "column" : 31,
"source_fragment" : "fwd" "source_fragment" : "fwd"
...@@ -1276,7 +1682,7 @@ ...@@ -1276,7 +1682,7 @@
"name" : "node_2", "name" : "node_2",
"id" : 0, "id" : 0,
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 28, "line" : 28,
"column" : 12, "column" : 12,
"source_fragment" : "hdr.ipv4.isValid()" "source_fragment" : "hdr.ipv4.isValid()"
...@@ -1292,17 +1698,17 @@ ...@@ -1292,17 +1698,17 @@
} }
} }
}, },
"false_next" : null, "true_next" : "node_3",
"true_next" : "node_3" "false_next" : "ipv4_route"
}, },
{ {
"name" : "node_3", "name" : "node_3",
"id" : 1, "id" : 1,
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 29, "line" : 29,
"column" : 16, "column" : 16,
"source_fragment" : "hdr.udp.dstPort == 8889" "source_fragment" : "hdr.udp.dstPort == 8000"
}, },
"expression" : { "expression" : {
"type" : "expression", "type" : "expression",
...@@ -1314,7 +1720,7 @@ ...@@ -1314,7 +1720,7 @@
}, },
"right" : { "right" : {
"type" : "hexstr", "type" : "hexstr",
"value" : "0x22b9" "value" : "0x1f40"
} }
} }
}, },
...@@ -1325,7 +1731,7 @@ ...@@ -1325,7 +1731,7 @@
"name" : "node_4", "name" : "node_4",
"id" : 2, "id" : 2,
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 30, "line" : 30,
"column" : 20, "column" : 20,
"source_fragment" : "standard_metadata.instance_type == 0" "source_fragment" : "standard_metadata.instance_type == 0"
...@@ -1351,7 +1757,7 @@ ...@@ -1351,7 +1757,7 @@
"name" : "node_7", "name" : "node_7",
"id" : 3, "id" : 3,
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 35, "line" : 35,
"column" : 23, "column" : 23,
"source_fragment" : "hdr.udp.dstPort == 9000" "source_fragment" : "hdr.udp.dstPort == 9000"
...@@ -1370,8 +1776,8 @@ ...@@ -1370,8 +1776,8 @@
} }
} }
}, },
"false_next" : null, "true_next" : "tbl_act_0",
"true_next" : "tbl_act_0" "false_next" : "ipv4_route"
} }
] ]
}, },
...@@ -1379,16 +1785,16 @@ ...@@ -1379,16 +1785,16 @@
"name" : "egress", "name" : "egress",
"id" : 1, "id" : 1,
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 51, "line" : 56,
"column" : 8, "column" : 8,
"source_fragment" : "egress" "source_fragment" : "egress"
}, },
"init_table" : "node_12", "init_table" : "node_14",
"tables" : [ "tables" : [
{ {
"name" : "tbl_act_1", "name" : "tbl_act_2",
"id" : 4, "id" : 6,
"key" : [], "key" : [],
"match_type" : "exact", "match_type" : "exact",
"type" : "simple", "type" : "simple",
...@@ -1396,22 +1802,68 @@ ...@@ -1396,22 +1802,68 @@
"with_counters" : false, "with_counters" : false,
"support_timeout" : false, "support_timeout" : false,
"direct_meters" : null, "direct_meters" : null,
"action_ids" : [6], "action_ids" : [10],
"actions" : ["act_1"], "actions" : ["act_2"],
"base_default_next" : "tbl_act_3", "base_default_next" : "node_19",
"next_tables" : { "next_tables" : {
"act_1" : "tbl_act_3" "act_2" : "node_19"
}, },
"default_entry" : { "default_entry" : {
"action_id" : 6, "action_id" : 10,
"action_const" : true, "action_const" : true,
"action_data" : [], "action_data" : [],
"action_entry_const" : true "action_entry_const" : true
} }
}, },
{ {
"name" : "tbl_act_2", "name" : "tbl_act_3",
"id" : 5, "id" : 7,
"key" : [],
"match_type" : "exact",
"type" : "simple",
"max_size" : 1024,
"with_counters" : false,
"support_timeout" : false,
"direct_meters" : null,
"action_ids" : [11],
"actions" : ["act_3"],
"base_default_next" : "node_19",
"next_tables" : {
"act_3" : "node_19"
},
"default_entry" : {
"action_id" : 11,
"action_const" : true,
"action_data" : [],
"action_entry_const" : true
}
},
{
"name" : "tbl_clone_packet",
"id" : 8,
"key" : [],
"match_type" : "exact",
"type" : "simple",
"max_size" : 1024,
"with_counters" : false,
"support_timeout" : false,
"direct_meters" : null,
"action_ids" : [5],
"actions" : ["clone_packet"],
"base_default_next" : "node_22",
"next_tables" : {
"clone_packet" : "node_22"
},
"default_entry" : {
"action_id" : 5,
"action_const" : true,
"action_data" : [],
"action_entry_const" : true
}
},
{
"name" : "tbl_clone_packet3",
"id" : 9,
"key" : [], "key" : [],
"match_type" : "exact", "match_type" : "exact",
"type" : "simple", "type" : "simple",
...@@ -1420,10 +1872,10 @@ ...@@ -1420,10 +1872,10 @@
"support_timeout" : false, "support_timeout" : false,
"direct_meters" : null, "direct_meters" : null,
"action_ids" : [7], "action_ids" : [7],
"actions" : ["act_2"], "actions" : ["clone_packet"],
"base_default_next" : "tbl_act_3", "base_default_next" : "node_24",
"next_tables" : { "next_tables" : {
"act_2" : "tbl_act_3" "clone_packet" : "node_24"
}, },
"default_entry" : { "default_entry" : {
"action_id" : 7, "action_id" : 7,
...@@ -1433,8 +1885,8 @@ ...@@ -1433,8 +1885,8 @@
} }
}, },
{ {
"name" : "tbl_act_3", "name" : "tbl_clone_packet2",
"id" : 6, "id" : 10,
"key" : [], "key" : [],
"match_type" : "exact", "match_type" : "exact",
"type" : "simple", "type" : "simple",
...@@ -1442,14 +1894,60 @@ ...@@ -1442,14 +1894,60 @@
"with_counters" : false, "with_counters" : false,
"support_timeout" : false, "support_timeout" : false,
"direct_meters" : null, "direct_meters" : null,
"action_ids" : [8], "action_ids" : [6],
"actions" : ["act_3"], "actions" : ["clone_packet"],
"base_default_next" : "tbl_act_4",
"next_tables" : {
"clone_packet" : "tbl_act_4"
},
"default_entry" : {
"action_id" : 6,
"action_const" : true,
"action_data" : [],
"action_entry_const" : true
}
},
{
"name" : "tbl_act_4",
"id" : 11,
"key" : [],
"match_type" : "exact",
"type" : "simple",
"max_size" : 1024,
"with_counters" : false,
"support_timeout" : false,
"direct_meters" : null,
"action_ids" : [12],
"actions" : ["act_4"],
"base_default_next" : null, "base_default_next" : null,
"next_tables" : { "next_tables" : {
"act_3" : null "act_4" : null
}, },
"default_entry" : { "default_entry" : {
"action_id" : 8, "action_id" : 12,
"action_const" : true,
"action_data" : [],
"action_entry_const" : true
}
},
{
"name" : "tbl_act_5",
"id" : 12,
"key" : [],
"match_type" : "exact",
"type" : "simple",
"max_size" : 1024,
"with_counters" : false,
"support_timeout" : false,
"direct_meters" : null,
"action_ids" : [13],
"actions" : ["act_5"],
"base_default_next" : null,
"next_tables" : {
"act_5" : null
},
"default_entry" : {
"action_id" : 13,
"action_const" : true, "action_const" : true,
"action_data" : [], "action_data" : [],
"action_entry_const" : true "action_entry_const" : true
...@@ -1457,7 +1955,7 @@ ...@@ -1457,7 +1955,7 @@
}, },
{ {
"name" : "tbl_update_packet", "name" : "tbl_update_packet",
"id" : 7, "id" : 13,
"key" : [], "key" : [],
"match_type" : "exact", "match_type" : "exact",
"type" : "simple", "type" : "simple",
...@@ -1465,14 +1963,14 @@ ...@@ -1465,14 +1963,14 @@
"with_counters" : false, "with_counters" : false,
"support_timeout" : false, "support_timeout" : false,
"direct_meters" : null, "direct_meters" : null,
"action_ids" : [5], "action_ids" : [9],
"actions" : ["update_packet"], "actions" : ["update_packet"],
"base_default_next" : "tbl_recirculate_packet", "base_default_next" : "tbl_recirculate_packet",
"next_tables" : { "next_tables" : {
"update_packet" : "tbl_recirculate_packet" "update_packet" : "tbl_recirculate_packet"
}, },
"default_entry" : { "default_entry" : {
"action_id" : 5, "action_id" : 9,
"action_const" : true, "action_const" : true,
"action_data" : [], "action_data" : [],
"action_entry_const" : true "action_entry_const" : true
...@@ -1480,7 +1978,7 @@ ...@@ -1480,7 +1978,7 @@
}, },
{ {
"name" : "tbl_recirculate_packet", "name" : "tbl_recirculate_packet",
"id" : 8, "id" : 14,
"key" : [], "key" : [],
"match_type" : "exact", "match_type" : "exact",
"type" : "simple", "type" : "simple",
...@@ -1488,14 +1986,14 @@ ...@@ -1488,14 +1986,14 @@
"with_counters" : false, "with_counters" : false,
"support_timeout" : false, "support_timeout" : false,
"direct_meters" : null, "direct_meters" : null,
"action_ids" : [4], "action_ids" : [8],
"actions" : ["recirculate_packet"], "actions" : ["recirculate_packet"],
"base_default_next" : null, "base_default_next" : null,
"next_tables" : { "next_tables" : {
"recirculate_packet" : null "recirculate_packet" : null
}, },
"default_entry" : { "default_entry" : {
"action_id" : 4, "action_id" : 8,
"action_const" : true, "action_const" : true,
"action_data" : [], "action_data" : [],
"action_entry_const" : true "action_entry_const" : true
...@@ -1505,13 +2003,13 @@ ...@@ -1505,13 +2003,13 @@
"action_profiles" : [], "action_profiles" : [],
"conditionals" : [ "conditionals" : [
{ {
"name" : "node_12", "name" : "node_14",
"id" : 4, "id" : 4,
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 98, "line" : 110,
"column" : 12, "column" : 12,
"source_fragment" : "hdr.udp.dstPort == 8889" "source_fragment" : "hdr.udp.dstPort == 8000"
}, },
"expression" : { "expression" : {
"type" : "expression", "type" : "expression",
...@@ -1523,19 +2021,19 @@ ...@@ -1523,19 +2021,19 @@
}, },
"right" : { "right" : {
"type" : "hexstr", "type" : "hexstr",
"value" : "0x22b9" "value" : "0x1f40"
} }
} }
}, },
"true_next" : "node_13", "true_next" : "node_15",
"false_next" : "node_18" "false_next" : "node_28"
}, },
{ {
"name" : "node_13", "name" : "node_15",
"id" : 5, "id" : 5,
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 99, "line" : 111,
"column" : 16, "column" : 16,
"source_fragment" : "standard_metadata.instance_type == 0 || standard_metadata.instance_type == 3" "source_fragment" : "standard_metadata.instance_type == 0 || standard_metadata.instance_type == 3"
}, },
...@@ -1573,15 +2071,15 @@ ...@@ -1573,15 +2071,15 @@
} }
} }
}, },
"true_next" : "tbl_act_1", "true_next" : "tbl_act_2",
"false_next" : "node_15" "false_next" : "node_17"
}, },
{ {
"name" : "node_15", "name" : "node_17",
"id" : 6, "id" : 6,
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 102, "line" : 115,
"column" : 23, "column" : 23,
"source_fragment" : "standard_metadata.instance_type == 9" "source_fragment" : "standard_metadata.instance_type == 9"
}, },
...@@ -1599,15 +2097,119 @@ ...@@ -1599,15 +2097,119 @@
} }
} }
}, },
"true_next" : "tbl_act_2", "true_next" : "tbl_act_3",
"false_next" : "tbl_act_3" "false_next" : "node_19"
}, },
{ {
"name" : "node_18", "name" : "node_19",
"id" : 7, "id" : 7,
"source_info" : { "source_info" : {
"filename" : "test.p4", "filename" : "p4src/test.p4",
"line" : 158, "line" : 122,
"column" : 16,
"source_fragment" : "meta.exec_hdr.function_count > 0"
},
"expression" : {
"type" : "expression",
"value" : {
"op" : ">",
"left" : {
"type" : "field",
"value" : ["exec_hdr", "function_count"]
},
"right" : {
"type" : "hexstr",
"value" : "0x00"
}
}
},
"true_next" : "node_20",
"false_next" : "tbl_act_5"
},
{
"name" : "node_20",
"id" : 8,
"source_info" : {
"filename" : "p4src/test.p4",
"line" : 123,
"column" : 20,
"source_fragment" : "meta.exec_hdr.function_count == 5"
},
"expression" : {
"type" : "expression",
"value" : {
"op" : "==",
"left" : {
"type" : "field",
"value" : ["exec_hdr", "function_count"]
},
"right" : {
"type" : "hexstr",
"value" : "0x05"
}
}
},
"true_next" : "tbl_clone_packet",
"false_next" : "node_22"
},
{
"name" : "node_22",
"id" : 9,
"source_info" : {
"filename" : "p4src/test.p4",
"line" : 125,
"column" : 20,
"source_fragment" : "meta.exec_hdr.function_count == 4"
},
"expression" : {
"type" : "expression",
"value" : {
"op" : "==",
"left" : {
"type" : "field",
"value" : ["exec_hdr", "function_count"]
},
"right" : {
"type" : "hexstr",
"value" : "0x04"
}
}
},
"true_next" : "tbl_clone_packet3",
"false_next" : "node_24"
},
{
"name" : "node_24",
"id" : 10,
"source_info" : {
"filename" : "p4src/test.p4",
"line" : 127,
"column" : 20,
"source_fragment" : "meta.exec_hdr.function_count == 3"
},
"expression" : {
"type" : "expression",
"value" : {
"op" : "==",
"left" : {
"type" : "field",
"value" : ["exec_hdr", "function_count"]
},
"right" : {
"type" : "hexstr",
"value" : "0x03"
}
}
},
"true_next" : "tbl_clone_packet2",
"false_next" : "tbl_act_4"
},
{
"name" : "node_28",
"id" : 11,
"source_info" : {
"filename" : "p4src/test.p4",
"line" : 177,
"column" : 19, "column" : 19,
"source_fragment" : "hdr.udp.dstPort == 9000" "source_fragment" : "hdr.udp.dstPort == 9000"
}, },
...@@ -1680,11 +2282,6 @@ ...@@ -1680,11 +2282,6 @@
"flow" : "ingress", "flow" : "ingress",
"header" : "scalars", "header" : "scalars",
"field" : "chain_state" "field" : "chain_state"
},
{
"flow" : "egress",
"header" : "scalars",
"field" : "chain_state_2"
} }
] ]
} }
\ No newline at end of file
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
#define V1MODEL_VERSION 20200408 #define V1MODEL_VERSION 20200408
#include <v1model.p4> #include <v1model.p4>
#include "includes/defines.p4" #include "includes/defines.p4"
#include "includes/headers.p4" #include "includes/headers_test.p4"
#include "includes/parsers.p4" #include "includes/parsers.p4"
...@@ -40,10 +40,15 @@ control ingress(inout headers hdr, inout metadata meta, inout standard_metadata_ ...@@ -40,10 +40,15 @@ control ingress(inout headers hdr, inout metadata meta, inout standard_metadata_
chain_state = chain_state | (8w1 << hdr.map_hdr.function_id); chain_state = chain_state | (8w1 << hdr.map_hdr.function_id);
current_state.write(index, chain_state); current_state.write(index, chain_state);
} }
// hdr.map_hdr.data = (bit<32>)chain_state; hdr.map_hdr.data = (bit<32>)chain_state;
fwd.apply(); // fwd.apply();
standard_metadata.egress_spec = standard_metadata.ingress_port;
} else {
fwd.apply();
} }
} else {
fwd.apply();
} }
} }
} }
...@@ -68,6 +73,14 @@ control egress(inout headers hdr, inout metadata meta, inout standard_metadata_t ...@@ -68,6 +73,14 @@ control egress(inout headers hdr, inout metadata meta, inout standard_metadata_t
clone3(CloneType.E2E, 4, {standard_metadata, meta}); clone3(CloneType.E2E, 4, {standard_metadata, meta});
} }
@name(".clone_packet") action clone_packet2() {
clone3(CloneType.E2E, 3, {standard_metadata, meta});
}
@name(".clone_packet") action clone_packet3() {
clone3(CloneType.E2E, 2, {standard_metadata, meta});
}
@name(".recirculate_packet") action recirculate_packet() { @name(".recirculate_packet") action recirculate_packet() {
recirculate({standard_metadata, meta}); recirculate({standard_metadata, meta});
} }
...@@ -75,9 +88,9 @@ control egress(inout headers hdr, inout metadata meta, inout standard_metadata_t ...@@ -75,9 +88,9 @@ control egress(inout headers hdr, inout metadata meta, inout standard_metadata_t
@name(".update_packet") action update_packet() { @name(".update_packet") action update_packet() {
hdr.udp.dstPort = MDS_PORT; hdr.udp.dstPort = MDS_PORT;
hdr.udp.srcPort = REPLY_PORT; hdr.udp.srcPort = REPLY_PORT;
hdr.ipv4.dstAddr = CONTROLLER_IP; hdr.ipv4.dstAddr = SERVER_IP;
hdr.ipv4.srcAddr = SERVER_IP; // hdr.ipv4.srcAddr = SERVER_IP;
standard_metadata.egress_port = 4; standard_metadata.egress_spec = standard_metadata.ingress_port;
} }
@name(".reroute_packet_act") action reroute_packet_act(bit<32> dstAddr) { @name(".reroute_packet_act") action reroute_packet_act(bit<32> dstAddr) {
...@@ -97,6 +110,7 @@ control egress(inout headers hdr, inout metadata meta, inout standard_metadata_t ...@@ -97,6 +110,7 @@ control egress(inout headers hdr, inout metadata meta, inout standard_metadata_t
if (hdr.udp.dstPort == MDS_PORT) { if (hdr.udp.dstPort == MDS_PORT) {
if (standard_metadata.instance_type == PKT_INSTANCE_TYPE_NORMAL || standard_metadata.instance_type == PKT_INSTANCE_TYPE_INGRESS_RECIRC) { if (standard_metadata.instance_type == PKT_INSTANCE_TYPE_NORMAL || standard_metadata.instance_type == PKT_INSTANCE_TYPE_INGRESS_RECIRC) {
meta.exec_hdr.function_count = hdr.map_hdr.function_count; meta.exec_hdr.function_count = hdr.map_hdr.function_count;
hdr.map_hdr.function_id = hdr.map_hdr.function_count;
// hdr.map_hdr.data = (bit<32>)standard_metadata.egress_port; // hdr.map_hdr.data = (bit<32>)standard_metadata.egress_port;
} else if (standard_metadata.instance_type == PKT_INSTANCE_TYPE_EGRESS_CLONE) { } else if (standard_metadata.instance_type == PKT_INSTANCE_TYPE_EGRESS_CLONE) {
meta.exec_hdr.function_count = meta.exec_hdr.function_count - 8w1; meta.exec_hdr.function_count = meta.exec_hdr.function_count - 8w1;
...@@ -106,52 +120,60 @@ control egress(inout headers hdr, inout metadata meta, inout standard_metadata_t ...@@ -106,52 +120,60 @@ control egress(inout headers hdr, inout metadata meta, inout standard_metadata_t
* create a packet replica for next function to be checked * create a packet replica for next function to be checked
**/ **/
if (meta.exec_hdr.function_count > 0) { if (meta.exec_hdr.function_count > 0) {
if (meta.exec_hdr.function_count == 5)
clone_packet(); clone_packet();
hdr.map_hdr.data = (bit<32>)standard_metadata.instance_type; if (meta.exec_hdr.function_count == 4)
} clone_packet3();
bit<8> dependency = 8w0; if (meta.exec_hdr.function_count == 3)
bit<8> chain_state; clone_packet2();
bit<8> function_state = 8w0;
@atomic {
current_state.read(chain_state, hdr.map_hdr.exec_id);
}
if (meta.exec_hdr.function_count == 8w0) {
dependency = hdr.map_hdr.f0;
function_state = 8w1 << 0;
} else if (meta.exec_hdr.function_count == 8w1) {
dependency = hdr.map_hdr.f1;
function_state = 8w1 << 1;
} else if (meta.exec_hdr.function_count == 8w2) {
dependency = hdr.map_hdr.f2;
function_state = 8w1 << 2;
} else if (meta.exec_hdr.function_count == 8w3) {
dependency = hdr.map_hdr.f3;
function_state = 8w1 << 3;
} else if (meta.exec_hdr.function_count == 8w4) {
dependency = hdr.map_hdr.f4;
function_state = 8w1 << 4;
}
// hdr.map_hdr.data = (bit<32>)(chain_state & function_state);
/**
* if current function under scanner has not executed
* and its dependency condition is met continue
**/
// hdr.map_hdr.data = (bit<32>)123;
bit<8> function_dispatch_state;
@atomic {
dispatch_state.read(function_dispatch_state, hdr.map_hdr.exec_id);
// hdr.map_hdr.data = (bit<32>) function_dispatch_state;
if (((function_dispatch_state & function_state) == 8w0) && ((chain_state & dependency) == dependency)) {
function_dispatch_state = function_dispatch_state | (function_state);
dispatch_state.write(hdr.map_hdr.exec_id, function_dispatch_state);
// reroute_packet.apply();
hdr.map_hdr.data = 32w1;
} else { } else {
hdr.ipv4.dstAddr = 0x0a000009; hdr.map_hdr.data = 32w2;
} }
} // bit<8> dependency = 8w0;
// bit<8> chain_state;
// bit<8> function_state = 8w0;
// @atomic {
// current_state.read(chain_state, hdr.map_hdr.exec_id);
// }
// if (meta.exec_hdr.function_count == 8w0) {
// dependency = hdr.map_hdr.f0;
// function_state = 8w1 << 0;
// } else if (meta.exec_hdr.function_count == 8w1) {
// dependency = hdr.map_hdr.f1;
// function_state = 8w1 << 1;
// } else if (meta.exec_hdr.function_count == 8w2) {
// dependency = hdr.map_hdr.f2;
// function_state = 8w1 << 2;
// } else if (meta.exec_hdr.function_count == 8w3) {
// dependency = hdr.map_hdr.f3;
// function_state = 8w1 << 3;
// } else if (meta.exec_hdr.function_count == 8w4) {
// dependency = hdr.map_hdr.f4;
// function_state = 8w1 << 4;
// }
// hdr.map_hdr.data = (bit<32>)(meta.exec_hdr.function_count);
// /**
// * if current function under scanner has not executed
// * and its dependency condition is met continue
// **/
// // hdr.map_hdr.data = (bit<32>)123;
// bit<8> function_dispatch_state;
// @atomic {
// dispatch_state.read(function_dispatch_state, hdr.map_hdr.exec_id);
// // hdr.map_hdr.data = (bit<32>) function_dispatch_state;
// if (((function_dispatch_state & function_state) == 8w0) && ((chain_state & dependency) == dependency)) {
// function_dispatch_state = function_dispatch_state | (function_state);
// dispatch_state.write(hdr.map_hdr.exec_id, function_dispatch_state);
// // reroute_packet.apply();
// hdr.udp.dstPort = MDS_PORT;
// } else {
// hdr.udp.dstPort = 5000;
// }
// }
} else if (hdr.udp.dstPort == REPLY_PORT) { } else if (hdr.udp.dstPort == REPLY_PORT) {
update_packet(); update_packet();
recirculate_packet(); recirculate_packet();
......
...@@ -50,6 +50,13 @@ ...@@ -50,6 +50,13 @@
} }
] ]
}, },
{
"preamble": {
"id": 16834936,
"name": "clone_packet",
"alias": "clone_packet"
}
},
{ {
"preamble": { "preamble": {
"id": 16806395, "id": 16806395,
......
##########################################
# Header instance definitions #
##########################################
errors:
type: enum
values:
- NoError: 1
- PacketTooShort: 2
- NoMatch: 3
- StackOutOfBounds: 4
- HeaderTooShort: 5
- ParserTimeout: 6
ethernet:
fields:
- dstAddr: 48
- srcAddr: 48
- etherType: 16
type: header
exec_hdr:
fields:
- function_count: 8
- function: 8
type: metadata
ing_metadata:
fields:
- drop: 1
- egress_port: 9
- packet_type: 4
- _padding: 2
type: metadata
ingress::scalars:
fields:
- chain_state: 8
type: metadata
ipv4:
calculated_fields:
- condition: valid(ipv4)
field: hdrChecksum
func: calc
type: verify
- condition: valid(ipv4)
field: hdrChecksum
func: calc_0
type: update
fields:
- version: 4
- ihl: 4
- diffserv: 8
- totalLen: 16
- identification: 16
- flags: 3
- fragOffset: 13
- ttl: 8
- protocol: 8
- hdrChecksum: 16
- srcAddr: 32
- dstAddr: 32
type: header
map_hdr:
fields:
- chain_id: 32
- exec_id: 32
- function_id: 8
- data: 32
- function_count: 8
- f0: 8
- f1: 8
- f2: 8
- f3: 8
- f4: 8
type: header
resubmit_meta:
fields:
- current_state: 8
- data: 32
type: metadata
standard_metadata:
fields:
- ingress_port: 16
- packet_length: 14
- egress_spec: 16
- egress_port: 16
- egress_instance: 10
- instance_type: 4
- clone_spec: 32
- parser_error_location: 8
- parser_status: 3
- checksum_error: 1
type: metadata
udp:
fields:
- srcPort: 16
- dstPort: 16
- length_: 16
- checksum: 16
type: header
##########################################
# Register definitions #
##########################################
current_state:
class: global
fields:
- value: 8
instance_count: 16384
type: register
dispatch_state:
class: global
fields:
- value: 8
instance_count: 16384
type: register
##########################################
# Field list definitions #
##########################################
field_list_4:
fields:
- ipv4.version
- ipv4.ihl
- ipv4.diffserv
- ipv4.totalLen
- ipv4.identification
- ipv4.flags
- ipv4.fragOffset
- ipv4.ttl
- ipv4.protocol
- ipv4.srcAddr
- ipv4.dstAddr
type: field_list
fl:
fields:
- standard_metadata.ingress_port
- standard_metadata.packet_length
- standard_metadata.egress_spec
- standard_metadata.egress_port
- standard_metadata.egress_instance
- standard_metadata.instance_type
- standard_metadata.clone_spec
- standard_metadata.parser_error_location
- standard_metadata.parser_status
- standard_metadata.checksum_error
- ing_metadata.drop
- ing_metadata.egress_port
- ing_metadata.packet_type
- resubmit_meta.current_state
- resubmit_meta.data
- exec_hdr.function_count
- exec_hdr.function
type: field_list
fl_0:
fields:
- standard_metadata.ingress_port
- standard_metadata.packet_length
- standard_metadata.egress_spec
- standard_metadata.egress_port
- standard_metadata.egress_instance
- standard_metadata.instance_type
- standard_metadata.clone_spec
- standard_metadata.parser_error_location
- standard_metadata.parser_status
- standard_metadata.checksum_error
- ing_metadata.drop
- ing_metadata.egress_port
- ing_metadata.packet_type
- resubmit_meta.current_state
- resubmit_meta.data
- exec_hdr.function_count
- exec_hdr.function
type: field_list
fl_1:
fields:
- standard_metadata.ingress_port
- standard_metadata.packet_length
- standard_metadata.egress_spec
- standard_metadata.egress_port
- standard_metadata.egress_instance
- standard_metadata.instance_type
- standard_metadata.clone_spec
- standard_metadata.parser_error_location
- standard_metadata.parser_status
- standard_metadata.checksum_error
- ing_metadata.drop
- ing_metadata.egress_port
- ing_metadata.packet_type
- resubmit_meta.current_state
- resubmit_meta.data
- exec_hdr.function_count
- exec_hdr.function
type: field_list
tuple_0:
fields:
- standard_metadata.ingress_port
- standard_metadata.packet_length
- standard_metadata.egress_spec
- standard_metadata.egress_port
- standard_metadata.egress_instance
- standard_metadata.instance_type
- standard_metadata.clone_spec
- standard_metadata.parser_error_location
- standard_metadata.parser_status
- standard_metadata.checksum_error
- ing_metadata.drop
- ing_metadata.egress_port
- ing_metadata.packet_type
- resubmit_meta.current_state
- resubmit_meta.data
- exec_hdr.function_count
- exec_hdr.function
type: field_list
##########################################
# Field list calculations #
##########################################
calc:
algorithm: csum16
inputs:
- field_list_4
output_width: 16
type: field_list_calculation
calc_0:
algorithm: csum16
inputs:
- field_list_4
output_width: 16
type: field_list_calculation
##########################################
# Parse states #
##########################################
parse_ipv4:
implementation: extract(ipv4);
select_value:
- ipv4.fragOffset
- ipv4.ihl
- ipv4.protocol
src_filename: p4src/includes/parsers.p4
src_lineno: 3
type: parse_state
parse_map_hdr:
implementation: extract(map_hdr);
src_filename: p4src/includes/parsers.p4
src_lineno: 20
type: parse_state
parse_udp:
implementation: extract(udp);
select_value:
- udp.dstPort
src_filename: p4src/includes/parsers.p4
src_lineno: 11
type: parse_state
start:
implementation: extract(ethernet);
select_value:
- ethernet.etherType
src_filename: p4src/includes/parsers.p4
src_lineno: 25
type: parse_state
##########################################
# Parser #
##########################################
parser:
format: dot
implementation: |-
digraph {
start -> parse_ipv4 [value="0x0800", mask="none", order="0"]
start -> exit [value="default", mask="none", order="1"]
parse_ipv4 -> parse_udp [value="0x00000511", mask="0x00000fff", order="0"]
parse_ipv4 -> exit [value="default", mask="none", order="1"]
parse_udp -> parse_map_hdr [value="0x1f40", mask="none", order="0"]
parse_udp -> parse_map_hdr [value="0x2328", mask="none", order="1"]
parse_udp -> exit [value="default", mask="none", order="2"]
parse_map_hdr -> exit [value="default", mask="none", order="0"]
}
start_state: start
type: parser
##########################################
# Action Expressions #
##########################################
_expression_act_0_0:
expression: ((ingress::scalars.chain_state) | (((((0x01) << (map_hdr.function_id)))
& (0xff))))
format: bracketed_expr
type: expression
_expression_act_1_0:
expression: ((ingress::scalars.chain_state) & (0xffffffff))
format: bracketed_expr
type: expression
_expression_act_3_0:
expression: ((((exec_hdr.function_count) + (0xff))) & (0xff))
format: bracketed_expr
type: expression
_expression_set_egress_0:
expression: ((((ipv4.ttl) + (0xff))) & (0xff))
format: bracketed_expr
type: expression
##########################################
# Action sets #
##########################################
egress::act_2:
implementation: |-
modify_field(exec_hdr.function_count, map_hdr.function_count);
modify_field(map_hdr.function_id, map_hdr.function_count);
src_filename: ''
src_lineno: 1
type: action
egress::act_3:
implementation: |-
modify_field(exec_hdr.function_count, _expression_act_3_0);
modify_field(map_hdr.function_id, exec_hdr.function_count);
src_filename: ''
src_lineno: 1
type: action
egress::act_4:
implementation: modify_field(map_hdr.data, 0x00000001);
src_filename: ''
src_lineno: 1
type: action
egress::act_5:
implementation: modify_field(map_hdr.data, 0x00000002);
src_filename: ''
src_lineno: 1
type: action
egress::clone_packet:
implementation: clone_egress_pkt_to_egress(0x00000002, fl_1);
src_filename: p4src/test.p4
src_lineno: 80
type: action
egress::recirculate_packet:
implementation: recirculate(tuple_0);
src_filename: p4src/test.p4
src_lineno: 84
type: action
egress::update_packet:
implementation: |-
modify_field(udp.dstPort, 0x1f40);
modify_field(udp.srcPort, 0x2328);
modify_field(ipv4.dstAddr, 0xc0a80202);
modify_field(standard_metadata.egress_spec, standard_metadata.ingress_port);
src_filename: p4src/test.p4
src_lineno: 88
type: action
ingress::act:
implementation: |-
modify_field(resubmit_meta.data, map_hdr.data);
modify_field(resubmit_meta.current_state, 0x00);
src_filename: ''
src_lineno: 1
type: action
ingress::act_0:
implementation: |-
register_read(ingress::scalars.chain_state, current_state.value, map_hdr.exec_id);
modify_field(ingress::scalars.chain_state, _expression_act_0_0);
register_write(current_state.value, map_hdr.exec_id, ingress::scalars.chain_state);
src_filename: ''
src_lineno: 1
type: action
ingress::act_1:
implementation: |-
modify_field(map_hdr.data, _expression_act_1_0);
modify_field(standard_metadata.egress_spec, standard_metadata.ingress_port);
src_filename: ''
src_lineno: 1
type: action
ingress::set_egress:
implementation: |-
modify_field(udp.checksum, 0x0000);
modify_field(standard_metadata.egress_spec, egress_spec);
modify_field(ipv4.ttl, _expression_set_egress_0);
parameter_list:
- egress_spec: 16
src_filename: p4src/test.p4
src_lineno: 12
type: action
##########################################
# Ingress and Egress tables #
##########################################
egress::tbl_act_2:
allowed_actions:
- egress::act_2
default_entry:
action: egress::act_2
const: true
max_entries: 1025
src_filename: ''
src_lineno: 1
type: table
egress::tbl_act_3:
allowed_actions:
- egress::act_3
default_entry:
action: egress::act_3
const: true
max_entries: 1025
src_filename: ''
src_lineno: 1
type: table
egress::tbl_act_4:
allowed_actions:
- egress::act_4
default_entry:
action: egress::act_4
const: true
max_entries: 1025
src_filename: ''
src_lineno: 1
type: table
egress::tbl_act_5:
allowed_actions:
- egress::act_5
default_entry:
action: egress::act_5
const: true
max_entries: 1025
src_filename: ''
src_lineno: 1
type: table
egress::tbl_clone_packet:
allowed_actions:
- egress::clone_packet
default_entry:
action: egress::clone_packet
const: true
max_entries: 1025
src_filename: ''
src_lineno: 1
type: table
egress::tbl_clone_packet2:
allowed_actions:
- egress::clone_packet
default_entry:
action: egress::clone_packet
const: true
max_entries: 1025
src_filename: ''
src_lineno: 1
type: table
egress::tbl_clone_packet3:
allowed_actions:
- egress::clone_packet
default_entry:
action: egress::clone_packet
const: true
max_entries: 1025
src_filename: ''
src_lineno: 1
type: table
egress::tbl_recirculate_packet:
allowed_actions:
- egress::recirculate_packet
default_entry:
action: egress::recirculate_packet
const: true
max_entries: 1025
src_filename: ''
src_lineno: 1
type: table
egress::tbl_update_packet:
allowed_actions:
- egress::update_packet
default_entry:
action: egress::update_packet
const: true
max_entries: 1025
src_filename: ''
src_lineno: 1
type: table
ingress::ipv4_route:
allowed_actions:
- ingress::set_egress
match_on:
standard_metadata.ingress_port: exact
max_entries: 8193
src_filename: p4src/test.p4
src_lineno: 17
type: table
ingress::tbl_act:
allowed_actions:
- ingress::act
default_entry:
action: ingress::act
const: true
max_entries: 1025
src_filename: ''
src_lineno: 1
type: table
ingress::tbl_act_0:
allowed_actions:
- ingress::act_0
default_entry:
action: ingress::act_0
const: true
max_entries: 1025
src_filename: ''
src_lineno: 1
type: table
ingress::tbl_act_1:
allowed_actions:
- ingress::act_1
default_entry:
action: ingress::act_1
const: true
max_entries: 1025
src_filename: ''
src_lineno: 1
type: table
##########################################
# Ingress conditionals sets #
##########################################
_condition_0:
condition: (valid(ipv4))
format: bracketed_expr
src_filename: p4src/test.p4
src_lineno: 28
type: conditional
_condition_1:
condition: ((udp.dstPort) == (8000))
format: bracketed_expr
src_filename: p4src/test.p4
src_lineno: 29
type: conditional
_condition_2:
condition: ((standard_metadata.instance_type) == (0))
format: bracketed_expr
src_filename: p4src/test.p4
src_lineno: 30
type: conditional
_condition_3:
condition: ((udp.dstPort) == (9000))
format: bracketed_expr
src_filename: p4src/test.p4
src_lineno: 35
type: conditional
##########################################
# Ingress control flow #
##########################################
ingress_flow:
doc: control flow for ingress
format: dot
implementation: |-
digraph {
"_condition_0" -> "ingress::ipv4_route" [condition = false]
"_condition_0" -> "_condition_1" [condition = true]
"ingress::ipv4_route" -> "exit_control_flow" [action = always]
"_condition_1" -> "_condition_3" [condition = false]
"_condition_1" -> "_condition_2" [condition = true]
"_condition_3" -> "ingress::ipv4_route" [condition = false]
"_condition_3" -> "ingress::tbl_act_0" [condition = true]
"ingress::tbl_act_0" -> "ingress::tbl_act_1" [action = always]
"ingress::tbl_act_1" -> "exit_control_flow" [action = always]
"_condition_2" -> "exit_control_flow" [condition = false]
"_condition_2" -> "ingress::tbl_act" [condition = true]
"ingress::tbl_act" -> "ingress::ipv4_route" [action = always]
}
start_state: _condition_0
type: control_flow
##########################################
# Egress conditionals sets #
##########################################
_condition_10:
condition: ((exec_hdr.function_count) == (3))
format: bracketed_expr
src_filename: p4src/test.p4
src_lineno: 127
type: conditional
_condition_11:
condition: ((udp.dstPort) == (9000))
format: bracketed_expr
src_filename: p4src/test.p4
src_lineno: 177
type: conditional
_condition_4:
condition: ((udp.dstPort) == (8000))
format: bracketed_expr
src_filename: p4src/test.p4
src_lineno: 110
type: conditional
_condition_5:
condition: ((((standard_metadata.instance_type) == (0))) or (((standard_metadata.instance_type)
== (3))))
format: bracketed_expr
src_filename: p4src/test.p4
src_lineno: 111
type: conditional
_condition_6:
condition: ((standard_metadata.instance_type) == (9))
format: bracketed_expr
src_filename: p4src/test.p4
src_lineno: 115
type: conditional
_condition_7:
condition: ((exec_hdr.function_count) > (0))
format: bracketed_expr
src_filename: p4src/test.p4
src_lineno: 122
type: conditional
_condition_8:
condition: ((exec_hdr.function_count) == (5))
format: bracketed_expr
src_filename: p4src/test.p4
src_lineno: 123
type: conditional
_condition_9:
condition: ((exec_hdr.function_count) == (4))
format: bracketed_expr
src_filename: p4src/test.p4
src_lineno: 125
type: conditional
##########################################
# Egress control flow #
##########################################
egress_flow:
doc: control flow for egress
format: dot
implementation: |-
digraph {
"_condition_4" -> "_condition_11" [condition = false]
"_condition_4" -> "_condition_5" [condition = true]
"_condition_11" -> "exit_control_flow" [condition = false]
"_condition_11" -> "egress::tbl_update_packet" [condition = true]
"egress::tbl_update_packet" -> "egress::tbl_recirculate_packet" [action = always]
"egress::tbl_recirculate_packet" -> "exit_control_flow" [action = always]
"_condition_5" -> "_condition_6" [condition = false]
"_condition_5" -> "egress::tbl_act_2" [condition = true]
"_condition_6" -> "_condition_7" [condition = false]
"_condition_6" -> "egress::tbl_act_3" [condition = true]
"_condition_7" -> "egress::tbl_act_5" [condition = false]
"_condition_7" -> "_condition_8" [condition = true]
"egress::tbl_act_5" -> "exit_control_flow" [action = always]
"_condition_8" -> "_condition_9" [condition = false]
"_condition_8" -> "egress::tbl_clone_packet" [condition = true]
"_condition_9" -> "_condition_10" [condition = false]
"_condition_9" -> "egress::tbl_clone_packet3" [condition = true]
"_condition_10" -> "egress::tbl_act_4" [condition = false]
"_condition_10" -> "egress::tbl_clone_packet2" [condition = true]
"egress::tbl_act_4" -> "exit_control_flow" [action = always]
"egress::tbl_clone_packet2" -> "egress::tbl_act_4" [action = always]
"egress::tbl_clone_packet3" -> "_condition_10" [action = always]
"egress::tbl_clone_packet" -> "_condition_9" [action = always]
"egress::tbl_act_3" -> "_condition_7" [action = always]
"egress::tbl_act_2" -> "_condition_7" [action = always]
}
start_state: _condition_4
type: control_flow
##########################################
# Deparsers #
##########################################
deparser:
order:
- ethernet
- ipv4
- udp
- map_hdr
type: deparser
##########################################
# Processor layout #
##########################################
layout:
format: list
implementation:
- parser
- ingress
- egress
type: processor_layout
##########################################
# Source info #
##########################################
source_info:
date: 2021/03/29 12:08:35
output_file: p4src/test.yml
p4_version: '16'
source_files:
- ''
- /opt/netronome/p4/include/16/p4include/core.p4
- p4src/test.p4
type: source_info
...@@ -4,23 +4,37 @@ import time ...@@ -4,23 +4,37 @@ import time
import thread import thread
import argparse import argparse
NC_PORT = 8000 NC_PORT = 8081
REPLY_PORT = 9000
SERVER_IP = "192.168.2.2"
parser = argparse.ArgumentParser(description='Mininet demo') parser = argparse.ArgumentParser(description='Mininet demo')
parser.add_argument('--client-ip', help='IP of client', parser.add_argument('--client-port', help='Port of the client',
type=str, action="store", required=True) type=int, action="store", required=False)
parser.add_argument('--reply-port', help='Port to reply to',
type=int, action="store", required=False)
parser.add_argument('--r', help='Port to reply to',
type=int, action="store", required=False)
args = parser.parse_args() args = parser.parse_args()
CLIENT_IP = args.client_ip toReply = True if args.r else False
NC_PORT = args.client_port if args.client_port else NC_PORT
REPLY_PORT = args.reply_port if args.reply_port else REPLY_PORT
# CLIENT_IP = "192.168.0.105" # CLIENT_IP = "192.168.0.105"
run_status = {}
len_key = 16 len_key = 16
counter = 0 counter = 0
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind((CLIENT_IP, NC_PORT)) s.bind(("0.0.0.0", NC_PORT))
print REPLY_PORT
while True: while True:
packet, addr = s.recvfrom(1024) packet, addr = s.recvfrom(1024)
# print packet
# print packet # print packet
counter = counter + 1 counter = counter + 1
base = 0 base = 0
...@@ -28,13 +42,27 @@ while True: ...@@ -28,13 +42,27 @@ while True:
base += 4 base += 4
exec_id = struct.unpack(">I", packet[base:base + 4])[0] exec_id = struct.unpack(">I", packet[base:base + 4])[0]
base += 4 base += 4
function_id = struct.unpack(">I", packet[base:base + 4])[0] function_id = struct.unpack("B", packet[base])[0]
base += 1 base += 1
data = struct.unpack(">I", packet[base:base + 4])[0] data = struct.unpack(">I", packet[base:base + 4])[0]
base += 4 base += 4
function_count = struct.unpack("B", packet[base])[0] function_count = struct.unpack("B", packet[base])[0]
print chain_id, exec_id, data, "function_id", function_id, function_count
if exec_id not in run_status:
run_status[exec_id] = set()
if function_id not in run_status[exec_id]:
run_status[exec_id].add(function_id)
# else:
# continue
print chain_id, exec_id, "data=", data, "function_id=", function_id, function_count,
data = [] data = []
for i in range(1, 6): for i in range(1, 6):
data.append(int(struct.unpack("B", packet[i+base])[0])) data.append(int(struct.unpack("B", packet[i+base])[0]))
print data print data
chain_id = struct.pack(">I", chain_id) # chain_id
exec_id = struct.pack(">I", exec_id)
function_id = struct.pack("B", function_id)
current_state = struct.pack("B", 0)
packetout = chain_id + exec_id + function_id + packet[9:]
if toReply:
s.sendto(packet, (SERVER_IP, REPLY_PORT))
...@@ -36,7 +36,7 @@ print args.send_data ...@@ -36,7 +36,7 @@ print args.send_data
PORT = args.client_port PORT = args.client_port
dataInt = args.send_data dataInt = args.send_data
fid = args.fid fid = args.fid
SERVER_IP = "192.168.2.2" SERVER_IP = "192.168.2.3"
egress_time = [] egress_time = []
ingress_time = [] ingress_time = []
...@@ -76,12 +76,12 @@ def genPacket(): ...@@ -76,12 +76,12 @@ def genPacket():
chain_id = 1 chain_id = 1
# data = 100 # data = 100
function_count = 5 function_count = 5
function_id = fid if (fid) else 0 function_id = fid if (fid) else 1
f0 = 0 f0 = 0
f1 = 0 f1 = 1
f2 = 2 f2 = 2
f3 = 6 f3 = 0
f4 = 2 f4 = 0
print chain_id, exec_id, "function_id", function_id, function_count, \ print chain_id, exec_id, "function_id", function_id, function_count, \
f0, f1, f2, f3, f4 f0, f1, f2, f3, f4
offload_status = False offload_status = False
...@@ -100,7 +100,7 @@ def genPacket(): ...@@ -100,7 +100,7 @@ def genPacket():
data = struct.pack(">I", dataInt) # data data = struct.pack(">I", dataInt) # data
# print "{0:b}".format(data) # print "{0:b}".format(data)
function_count = struct.pack("B", function_count) # function count function_count = struct.pack("B", function_count) # function count
function_id = struct.pack(">I", function_id) # function count function_id = struct.pack(">I", function_id) # function count (changed to byte for test was >I)
f0 = struct.pack("B", f0) # f0 f0 = struct.pack("B", f0) # f0
f1 = struct.pack("B", f1) # f1 f1 = struct.pack("B", f1) # f1
f2 = struct.pack("B", f2) # f2 -> f0 f2 = struct.pack("B", f2) # f2 -> f0
......
...@@ -34,11 +34,11 @@ def addRule(worker): ...@@ -34,11 +34,11 @@ def addRule(worker):
default_rule = False default_rule = False
rule = makeRule(ip, port, mac, functionHash, tableId, rule_name, default_rule) rule = makeRule(ip, port, mac, functionHash, tableId, rule_name, default_rule)
ruleDictionary[functionHash] = rule ruleDictionary[functionHash] = rule
print ruleDictionary print "rule added: ", ruleDictionary
RTEInterface.Tables.AddRule( RTEInterface.Tables.AddRule(
rule["tableId"], rule["rule_name"], rule["default_rule"], rule["match"], rule["actions"]) rule["tableId"], rule["rule_name"], rule["default_rule"], rule["match"], rule["actions"])
ruleList = RTEInterface.Tables.ListRules(tableId) ruleList = RTEInterface.Tables.ListRules(tableId)
print ruleList print "new rule list: ", ruleList, "\n\n"
return 0 return 0
def deleteRule(worker): def deleteRule(worker):
...@@ -49,7 +49,8 @@ def deleteRule(worker): ...@@ -49,7 +49,8 @@ def deleteRule(worker):
rule["tableId"], rule["rule_name"], rule["default_rule"], rule["match"], rule["actions"]) rule["tableId"], rule["rule_name"], rule["default_rule"], rule["match"], rule["actions"])
del ruleDictionary[functionHash] del ruleDictionary[functionHash]
ruleList = RTEInterface.Tables.ListRules(tableId) ruleList = RTEInterface.Tables.ListRules(tableId)
print ruleList print "deleted rule"
print "new rule list: ", ruleList, "\n\n"
return 0 return 0
......
...@@ -15,7 +15,7 @@ struct = struct.jspack ...@@ -15,7 +15,7 @@ struct = struct.jspack
const app = express() const app = express()
let port = 5000, resource_id, functionHash, runtime, idleTime = 30, flagFirstRequest = true let port = 5000, resource_id, functionHash, runtime, idleTime = 300, flagFirstRequest = true
let waitTime let waitTime
resource_id = process.argv[2] resource_id = process.argv[2]
...@@ -139,12 +139,12 @@ server.on('error', (err) => { ...@@ -139,12 +139,12 @@ server.on('error', (err) => {
server.on('message', (msg, rinfo) => { server.on('message', (msg, rinfo) => {
// console.log("message", msg) // console.log("message", msg)
let payload = unpackPacket(msg) let payload = unpackPacket(msg)
console.log(payload, typeof payload); // console.log(payload, typeof payload);
lastRequest = Date.now() lastRequest = Date.now()
// console.log("network stack time", lastRequest - payload.t1)
totalRequest++ totalRequest++
executor(payload).then(result => { executor(payload).then(result => {
result = packPacket(payload) result = packPacket(payload)
console.log(result)
try { try {
udpProxy.send(result, 0, result.length, "8080", rinfo.address, function (err, bytes) { udpProxy.send(result, 0, result.length, "8080", rinfo.address, function (err, bytes) {
if (err) if (err)
...@@ -161,7 +161,7 @@ server.on('message', (msg, rinfo) => { ...@@ -161,7 +161,7 @@ server.on('message', (msg, rinfo) => {
function unpackPacket(packet) { function unpackPacket(packet) {
// let buffer = new Array(1024) // let buffer = new Array(1024)
let chain_id = null, exec_id = null, function_count = null, function_id = null, data = null let chain_id = null, exec_id = null, function_count = null, function_id = null, data = null
let base = 0 let base = 0, f0, f1, f2, f3, f4, t1, t2, t3, t4
chain_id = struct.Unpack(">I", packet, base) chain_id = struct.Unpack(">I", packet, base)
base += 4 base += 4
exec_id = struct.Unpack(">I", packet, base) exec_id = struct.Unpack(">I", packet, base)
...@@ -170,9 +170,30 @@ function unpackPacket(packet) { ...@@ -170,9 +170,30 @@ function unpackPacket(packet) {
base += 4 base += 4
data = struct.Unpack(">I", packet, base) data = struct.Unpack(">I", packet, base)
base += 4 base += 4
function_count = struct.Unpack("B", packet, base) function_count = struct.Unpack("I", packet, base)
base += 4
f0 = struct.Unpack("B", packet, base)
base += 1
f1 = struct.Unpack("B", packet, base)
base += 1
f2 = struct.Unpack("B", packet, base)
base += 1
f3 = struct.Unpack("B", packet, base)
base += 1
f4 = struct.Unpack("B", packet, base)
base += 1
t1 = struct.Unpack("I", packet, base)
base += 8
t2 = struct.Unpack("I", packet, base)
base += 8
t3 = struct.Unpack("I", packet, base)
base += 8
t4 = struct.Unpack("I", packet, base)
console.log("chain_id", chain_id, "exec_id", exec_id, "data", data, "function_count", function_count, "function_id", function_id) // console.log("chain_id", chain_id, "exec_id", exec_id, "data", data, "function_count", function_count, "function_id", function_id)
return { return {
...@@ -180,7 +201,8 @@ function unpackPacket(packet) { ...@@ -180,7 +201,8 @@ function unpackPacket(packet) {
exec_id: exec_id[0], exec_id: exec_id[0],
data: data[0], data: data[0],
function_count: function_count[0], function_count: function_count[0],
function_id: function_id[0] function_id: function_id[0],
f0, f1, f2, f3, f4, t1, t2, t3, t4
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment