Example #1
0
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);
}
Example #2
0
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;
}
Example #3
0
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;
}