Use pcap_setdirection instead of filter
This commit is contained in:
		
							parent
							
								
									6ed895d4c7
								
							
						
					
					
						commit
						590e7a079f
					
				
					 1 changed files with 11 additions and 6 deletions
				
			
		
							
								
								
									
										17
									
								
								ethsock.c
									
										
									
									
									
								
							
							
						
						
									
										17
									
								
								ethsock.c
									
										
									
									
									
								
							|  | @ -345,7 +345,7 @@ inline uint8_t *ethsock_get_hwaddr(struct ethsock *sock) | |||
| struct ethsock *ethsock_create(const char *intf, uint16_t protocol) | ||||
| { | ||||
| 	char buf[PCAP_ERRBUF_SIZE]; | ||||
| 	struct bpf_program fp; | ||||
| 	struct bpf_program bpf; | ||||
| 	struct ethsock *sock; | ||||
| 	bool is_bridge; | ||||
| 	int err; | ||||
|  | @ -412,17 +412,22 @@ struct ethsock *ethsock_create(const char *intf, uint16_t protocol) | |||
| 	} | ||||
| #endif | ||||
| 
 | ||||
| 	snprintf(buf, sizeof(buf), "ether proto 0x%04x and not ether src %s", | ||||
| 			protocol, mac_to_str(sock->hwaddr)); | ||||
| 	err = pcap_setdirection(sock->pcap, PCAP_D_IN); | ||||
| 	if (err) { | ||||
| 		pcap_perror(sock->pcap, "pcap_setdirection"); | ||||
| 		goto cleanup; | ||||
| 	} | ||||
| 
 | ||||
| 	err = pcap_compile(sock->pcap, &fp, buf, 0, 0); | ||||
| 	snprintf(buf, sizeof(buf), "ether proto 0x%04x", protocol); | ||||
| 
 | ||||
| 	err = pcap_compile(sock->pcap, &bpf, buf, 0, 0); | ||||
| 	if (err) { | ||||
| 		pcap_perror(sock->pcap, "pcap_compile"); | ||||
| 		goto cleanup; | ||||
| 	} | ||||
| 
 | ||||
| 	err = pcap_setfilter(sock->pcap, &fp); | ||||
| 	pcap_freecode(&fp); | ||||
| 	err = pcap_setfilter(sock->pcap, &bpf); | ||||
| 	pcap_freecode(&bpf); | ||||
| 
 | ||||
| 	if (err) { | ||||
| 		pcap_perror(sock->pcap, "pcap_setfilter"); | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue