Checksum the newly parsed fields
This commit is contained in:
		
					parent
					
						
							
								94a4085e72
							
						
					
				
			
			
				commit
				
					
						162ef20072
					
				
			
		
					 4 changed files with 32 additions and 2 deletions
				
			
		|  | @ -121,6 +121,7 @@ | |||
| |            |                                                                            |       | | ||||
| | 2019-03-23 | Parsing down to link layer option                                          |       | | ||||
| |            | Parsing on wrong field detected by unset fields in wireshark               |       | | ||||
| |            | Correcting parser->leads to incorrect checksum                             |       | | ||||
| |            |                                                                            |       | | ||||
| |            |                                                                            |       | | ||||
| | 2019-03-28 | Meet Laurent #4                                                            |       | | ||||
|  |  | |||
|  | @ -21,7 +21,7 @@ control MyVerifyChecksum(inout headers hdr, inout metadata meta) { | |||
| 
 | ||||
| control MyComputeChecksum(inout headers  hdr, inout metadata meta) { | ||||
|     apply { | ||||
|         update_checksum_with_payload(meta.do_cksum == 1, | ||||
|         update_checksum_with_payload(meta.task == TASK_CHECKSUM_ICMP6, | ||||
| 		 	{ | ||||
|                 hdr.ipv6.src_addr,         /* 128 */ | ||||
| 		 		hdr.ipv6.dst_addr,         /* 128 */ | ||||
|  | @ -34,6 +34,32 @@ control MyComputeChecksum(inout headers  hdr, inout metadata meta) { | |||
|             hdr.icmp6.checksum, | ||||
|             HashAlgorithm.csum16 | ||||
|         ); | ||||
| 
 | ||||
|         /* checksumming for icmp6_na_ns_option */ | ||||
|         update_checksum_with_payload(meta.task == TASK_CHECKSUM_ICMP6_NA, | ||||
| 		 	{ | ||||
|                 hdr.ipv6.src_addr,         /* 128 */ | ||||
| 		 		hdr.ipv6.dst_addr,         /* 128 */ | ||||
|                 meta.cast_length,          /* 32 */ | ||||
|                 24w0,                      /* 24 0's */ | ||||
|                 PROTO_ICMP6,               /* 8 */ | ||||
|                 hdr.icmp6.type,            /* 8 */ | ||||
|                 hdr.icmp6.code,            /* 8 */ | ||||
| 
 | ||||
|                 hdr.icmp6_na_ns.router, | ||||
|                 hdr.icmp6_na_ns.solicitated, | ||||
|                 hdr.icmp6_na_ns.override, | ||||
|                 hdr.icmp6_na_ns.reserved, | ||||
|                 hdr.icmp6_na_ns.target_addr, | ||||
| 
 | ||||
|                 hdr.icmp6_option_link_layer_addr.type, | ||||
|                 hdr.icmp6_option_link_layer_addr.ll_length, | ||||
|                 hdr.icmp6_option_link_layer_addr.mac_addr | ||||
|             }, | ||||
|             hdr.icmp6.checksum, | ||||
|             HashAlgorithm.csum16 | ||||
|         ); | ||||
| 
 | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -43,6 +43,9 @@ const task_t TASK_ICMP6_NS       = 1; | |||
| const task_t TASK_ICMP6_GENERAL  = 2; | ||||
| const task_t TASK_DEBUG          = 3; | ||||
| const task_t TASK_ICMP6_REPLY    = 4; | ||||
| const task_t TASK_CHECKSUM_ICMP6    = 5; /* data plane */ | ||||
| const task_t TASK_CHECKSUM_ICMP6_NA = 6; /* data plane */ | ||||
| 
 | ||||
| 
 | ||||
| /* 48+48+16 = 112 */ | ||||
| header ethernet_t { | ||||
|  | @ -165,7 +168,6 @@ struct metadata { | |||
|     task_t task; | ||||
|     bit<16> tcp_length; | ||||
|     bit<32> cast_length; | ||||
|     bit<1> do_cksum; | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
|  | @ -67,6 +67,7 @@ control MyIngress(inout headers hdr, | |||
|         hdr.icmp6_option_link_layer_addr.ll_length = 1; /* 1* 64 bit */ | ||||
|         hdr.icmp6_option_link_layer_addr.mac_addr = mac_addr; | ||||
| 
 | ||||
| 
 | ||||
|         /* version1: rebuilding packet */ | ||||
|         /* | ||||
|         truncate((bit<32>)(112 + 320 + 32)/8); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue