98 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
#include <core.p4>
 | 
						|
#include <sume_switch.p4>
 | 
						|
#include "headers.p4"
 | 
						|
#include "settings.p4"
 | 
						|
 | 
						|
/********************************************************************************
 | 
						|
 * Possible bugs / things to fix:
 | 
						|
 | 
						|
- Does NoAction exist?
 | 
						|
- Aligment of "meta" /  replace metadate with our own
 | 
						|
- what does sume_metadata contain? ingress port is where?
 | 
						|
nico@nsg-System:~$ find . -name sume_switch.p4
 | 
						|
./master-thesis/support/semester-thesis-1/project/SSS_example_2_SS/bitsnpices/sume_switch.p4
 | 
						|
nico@nsg-System:~$
 | 
						|
 | 
						|
/******************** INFO ONLY *************************/
 | 
						|
 | 
						|
// one-hot encoded: {DMA, NF3, DMA, NF2, DMA, NF1, DMA, NF0}
 | 
						|
// typedef bit<8> port_t;
 | 
						|
 | 
						|
/* standard sume switch metadata */
 | 
						|
// struct sume_metadata_t {
 | 
						|
//     bit<16> dma_q_size; // measured in 32-byte words
 | 
						|
//     bit<16> nf3_q_size; // measured in 32-byte words
 | 
						|
//     bit<16> nf2_q_size; // measured in 32-byte words
 | 
						|
//     bit<16> nf1_q_size; // measured in 32-byte words
 | 
						|
//     bit<16> nf0_q_size; // measured in 32-byte words
 | 
						|
//     bit<8> send_dig_to_cpu; // send digest_data to CPU
 | 
						|
//     bit<8> drop;
 | 
						|
//     port_t dst_port; // one-hot encoded: {DMA, NF3, DMA, NF2, DMA, NF1, DMA, NF0}
 | 
						|
//     port_t src_port; // one-hot encoded: {DMA, NF3, DMA, NF2, DMA, NF1, DMA, NF0}
 | 
						|
//     bit<16> pkt_len; // unsigned int
 | 
						|
// }
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/********************************************************************************
 | 
						|
 * Header
 | 
						|
 */
 | 
						|
 | 
						|
 | 
						|
// digest_data, MUST be 256 bits -- not used by us
 | 
						|
struct digest_data_t {
 | 
						|
    bit<256> unused;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
@Xilinx_MaxPacketRegion(1024)
 | 
						|
parser TopParser(packet_in packet,
 | 
						|
                 out headers hdr,
 | 
						|
                 out metadata meta,
 | 
						|
                 out digest_data_t digest_data,
 | 
						|
                 inout sume_metadata_t standard_metadata) {
 | 
						|
 | 
						|
    #include "parsers.p4"
 | 
						|
    digest_data.unused = 0; /* avoid compiler warning */
 | 
						|
}
 | 
						|
 | 
						|
/********************************************************************************
 | 
						|
 * Main
 | 
						|
 */
 | 
						|
control TopPipe(inout headers hdr,
 | 
						|
                inout metadata meta,
 | 
						|
                inout digest_data_t digest_data,
 | 
						|
                inout sume_metadata_t sume_metadata) {
 | 
						|
 | 
						|
    #include "netpfga.p4"
 | 
						|
 | 
						|
 | 
						|
 | 
						|
    apply {
 | 
						|
        dummy_table_for_netpfga.apply();
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
/********************************************************************************
 | 
						|
 * Deparser
 | 
						|
 */
 | 
						|
 | 
						|
@Xilinx_MaxPacketRegion(1024)
 | 
						|
control TopDeparser(packet_out packet,
 | 
						|
                    in headers hdr,
 | 
						|
                    in metadata meta,
 | 
						|
                    inout digest_data_t digest_data,
 | 
						|
                    inout sume_metadata_t sume_metadata) {
 | 
						|
 | 
						|
    #include "deparser.p4"
 | 
						|
}
 | 
						|
 | 
						|
/********************************************************************************
 | 
						|
 * Switch
 | 
						|
 */
 | 
						|
 | 
						|
SimpleSumeSwitch(
 | 
						|
    TopParser(),
 | 
						|
    TopPipe(),
 | 
						|
    TopDeparser()
 | 
						|
) main;
 |