Cleanup code, in theory finish mirror

Unclear: where / how to setup egress
This commit is contained in:
Nico Schottelius 2019-05-26 11:06:10 +02:00
parent 06014333ee
commit edd9624d29
2 changed files with 45 additions and 46 deletions

View File

@ -1,33 +1,17 @@
#include <core.p4>
#include <sume_switch.p4>
/*
Switch Calculator:
P4 program to use switch as a calculator and key-value lookup engine
/********************************************************************************
* Header
*/
typedef bit<48> EthAddr_t;
#define REG_READ 8w0
#define REG_WRITE 8w1
#define INDEX_WIDTH 4 // determines depth of const register
// define opCode types
#define ADD_OP 8w0
#define SUB_OP 8w1
#define LOOKUP_OP 8w2
#define ADD_REG_OP 8w3
#define SET_REG_OP 8w4
// standard Ethernet header
header Ethernet_h {
EthAddr_t dstAddr;
EthAddr_t srcAddr;
bit<16> etherType;
}
// List of all recognized headers
struct Parsed_packet {
Ethernet_h ethernet;
}
@ -38,12 +22,16 @@ struct user_metadata_t {
bit<8> unused;
}
// digest_data, MUST be 256 bits
// digest_data, MUST be 256 bits -- what is this used for?
struct digest_data_t {
bit<256> unused;
}
// Parser Implementation
/********************************************************************************
* Parser
*/
@Xilinx_MaxPacketRegion(1024)
parser TopParser(packet_in b,
out Parsed_packet p,
@ -59,7 +47,9 @@ parser TopParser(packet_in b,
}
}
// match-action pipeline
/********************************************************************************
* Main
*/
control TopPipe(inout Parsed_packet p,
inout user_metadata_t user_metadata,
inout digest_data_t digest_data,
@ -76,14 +66,16 @@ control TopPipe(inout Parsed_packet p,
}
table lookup_table {
key = { p.ethernet.dstAddr: exact; }
key = {
p.ethernet.dstAddr: exact;
}
actions = {
swap_eth_addresses;
do_nothing;
}
size = 64;
default_action = do_nothing;
default_action = swap_eth_addresses;
}
apply {
@ -91,8 +83,10 @@ control TopPipe(inout Parsed_packet p,
}
}
/********************************************************************************
* Deparser
*/
// Deparser Implementation
@Xilinx_MaxPacketRegion(1024)
control TopDeparser(packet_out b,
in Parsed_packet p,
@ -104,6 +98,12 @@ control TopDeparser(packet_out b,
}
}
/********************************************************************************
* Switch
*/
// Instantiate the switch
SimpleSumeSwitch(TopParser(), TopPipe(), TopDeparser()) main;
SimpleSumeSwitch(
TopParser(),
TopPipe(),
TopDeparser()
) main;

View File

@ -1,4 +1,4 @@
#!/usr/bin/env python
x3#!/usr/bin/env python
# from switch_calc_headers import *
from scapy.all import *
@ -116,26 +116,25 @@ def test_mirror():
pkt = pad_pkt(pkt, 64)
expPkt(pkt, 'nf0')
# Second IP
# # Second IP
# pktCnt += 1
# pkt = Ether(dst=MAC2, src=MAC1) / IPv6(src="fe80::1", dst="fe80::2")
# pkt = pad_pkt(pkt, 64)
# applyPkt(pkt, 'nf0', pktCnt)
# pktCnt += 1
# pkt = Ether(dst=MAC1, src=MAC2) / IPv6(src="fe80::2", dst="fe80::1")
# pkt = pad_pkt(pkt, 64)
# expPkt(pkt, 'nf0')
pktCnt += 1
pkt = Ether(dst=MAC2, src=MAC1) / IPv6(src="fe80::1", dst="fe80::2")
pkt = pad_pkt(pkt, 64)
applyPkt(pkt, 'nf0', pktCnt)
pktCnt += 1
pkt = Ether(dst=MAC1, src=MAC2) / IPv6(src="fe80::2", dst="fe80::1")
pkt = pad_pkt(pkt, 64)
expPkt(pkt, 'nf0')
# Third tcp
pktCnt += 1
pkt = Ether(dst=MAC2, src=MAC1) / IPv6(src="fe80::1", dst="fe80::2") / TCP(sport=42, dport=23)
pkt = pad_pkt(pkt, 64)
applyPkt(pkt, 'nf0', pktCnt)
pktCnt += 1
pkt = Ether(dst=MAC1, src=MAC2) / IPv6(src="fe80::2", dst="fe80::1") / TCP(sport=23, dport=42)
pkt = pad_pkt(pkt, 64)
expPkt(pkt, 'nf0')
# # Third tcp
# pktCnt += 1
# pkt = Ether(dst=MAC2, src=MAC1) / IPv6(src="fe80::1", dst="fe80::2") / TCP(sport=42, dport=23)
# pkt = pad_pkt(pkt, 64)
# applyPkt(pkt, 'nf0', pktCnt)
# pktCnt += 1
# pkt = Ether(dst=MAC1, src=MAC2) / IPv6(src="fe80::2", dst="fe80::1") / TCP(sport=23, dport=42)
# pkt = pad_pkt(pkt, 64)
# expPkt(pkt, 'nf0')
test_mirror()
write_pcap_files()