static int init_traffic(struct rte_mempool *mp, struct rte_mbuf **pkts_burst, uint32_t burst_size) { struct ether_hdr pkt_eth_hdr; struct ipv4_hdr pkt_ipv4_hdr; struct udp_hdr pkt_udp_hdr; uint32_t pktlen; static uint8_t src_mac[] = { 0x00, 0xFF, 0xAA, 0xFF, 0xAA, 0xFF }; static uint8_t dst_mac[] = { 0x00, 0xAA, 0xFF, 0xAA, 0xFF, 0xAA }; initialize_eth_header(&pkt_eth_hdr, (struct ether_addr *)src_mac, (struct ether_addr *)dst_mac, ETHER_TYPE_IPv4, 0, 0); pktlen = initialize_ipv4_header(&pkt_ipv4_hdr, IPV4_ADDR(10, 0, 0, 1), IPV4_ADDR(10, 0, 0, 2), 26); printf("IPv4 pktlen %u\n", pktlen); pktlen = initialize_udp_header(&pkt_udp_hdr, 0, 0, 18); printf("UDP pktlen %u\n", pktlen); return generate_packet_burst(mp, pkts_burst, &pkt_eth_hdr, 0, &pkt_ipv4_hdr, 1, &pkt_udp_hdr, burst_size, PACKET_BURST_GEN_PKT_LEN, 1); }
struct ifnet * loopif_init(void) { struct ifnet * ifn; ifn = ifn_register(&loopif_drv, &loopif_op, NULL, 0); if (ifn != NULL) { ifn_ipv4_set(ifn, IPV4_ADDR(127, 0, 0, 1), IPV4_ADDR(255, 0, 0, 0)); } return ifn; }
errno_t IOWebFilterClass::tl_connect_out_func(void *cookie, socket_t so, const struct sockaddr *to) { SocketTracker *tracker = (SocketTracker*)cookie; if(tracker==NULL || tracker->magic!=kSocketTrackerAttach) return 0; if(tracker->lock==NULL) { tracker->magic=kSocketTrackerInvalid; LOG(LOG_DEBUG, "I am in, %s, magic=%ld", tracker->proc_name, tracker->magic); return 0; } struct sockaddr_in *sock_addr = (struct sockaddr_in*)to; //just handle the ipv4 address if(sock_addr!=NULL) { if(sock_addr->sin_family==AF_INET6) tracker->magic=kSocketTrackerInvalid; LOG(LOG_DEBUG, "I am in, %s, magic=%ld", tracker->proc_name, tracker->magic); return 0; } if(tracker->lock) IOLockLock(tracker->lock); tracker->magic=kSocketTrackerConnect; //update status //record source information struct sockaddr sockname; bzero(&sockname, sizeof(sockname)); sock_getsockname(so, &sockname, sizeof(sockname)); if(sockname.sa_family==AF_INET6) { tracker->magic=kSocketTrackerInvalid; if(tracker->lock) IOLockUnlock(tracker->lock); return 0; } tracker->source.family = ((struct sockaddr_in*)&sockname)->sin_family; tracker->source.port = ((struct sockaddr_in*)&sockname)->sin_port; bzero(tracker->source.ip, sizeof(tracker->source.ip)); snprintf(tracker->source.ip, sizeof(tracker->source.ip), "%u.%u.%u.%u", IPV4_ADDR(sock_addr->sin_addr.s_addr)); //record destination information tracker->destination.family=sock_addr->sin_family; tracker->destination.port = sock_addr->sin_port; bzero(tracker->destination.ip, sizeof(tracker->destination.ip)); snprintf(tracker->destination.ip, sizeof(tracker->destination.ip), "%u.%u.%u.%u", IPV4_ADDR(sock_addr->sin_addr.s_addr)); if(strncmp(tracker->destination.ip, "127.0.0.1", sizeof("127.0.0.1"))==0 || (tracker->destination.port!=80 && tracker->destination.port!=8080)) { tracker->magic=kSocketTrackerInvalid; if(tracker->lock) IOLockUnlock(tracker->lock); return 0; } if(tracker->lock) IOLockUnlock(tracker->lock); return 0; }