Skip to content

alandtsang/mydpdkdns

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mydpdkdns

License

dns server with high performance, based on dpdk.

Documentation

Please refer to https://dpdk.org/doc.

Install dpdk

tar xf dpdk-17.02.1.tar.xz -C /root
cd /root
mv dpdk-17.02.1 dpdk
cd dpdk

make config T=x86_64-native-linuxapp-gcc
make
make install T=x86_64-native-linuxapp-gcc

Set environment

edit .profile or .bashrc, add the following:

export RTE_SDK=/root/dpdk
export RTE_TARGET=x86_64-native-linuxapp-gcc

Usage

# git clone https://github.com/alandtsang/mydpdkdns.git
# cd mydpdkdns/tools

record eth info

# ./recordeth.sh eth0

It will record the eth0 information to ethinfo file.

If recordeth.sh fails to execute, you need to manually create ethinfo.

e.g.

DEV=eth0
IPADDR=192.168.44.129
NETMADK=255.255.255.0
MAC=08:00:27:cf:bb:76
GATEWAY=192.168.44.2

insert modules and mount hugetlbfs

# ./preparedpdk.sh eth0

It will bind eth0 to DPDK.

start program

# ./start.sh
/root/mydpdkdns
-- RTE_SDK path:/root/dpdk
-- RTE_TARGET path:x86_64-native-linuxapp-gcc
-- RTE_SDK include path:/root/dpdk/include
-- RTE_SDK include path:/root/dpdk/lib
-- Configuring done
-- Generating done
-- Build files have been written to: /home/mydpdkdns/build
Scanning dependencies of target dserver
[100%] Built target dserver
EAL: Detected 4 lcore(s)
EAL: No free hugepages reported in hugepages-1048576kB
EAL: Probing VFIO support...
EAL: PCI device 0000:02:01.0 on NUMA socket -1
EAL:   probe driver: 8086:100f net_e1000_em
EAL: PCI device 0000:02:06.0 on NUMA socket -1
EAL:   probe driver: 8086:100f net_e1000_em
EAL: PCI device 0000:02:07.0 on NUMA socket -1
EAL:   probe driver: 8086:100f net_e1000_em
before Initialise each port
APP: Initialising port 0 ...
KNI: pci: 02:06:00 	 8086:100f
after Initialise each port

Checking link status
done
Port 0 Link Up - speed 1000 Mbps - full-duplex
APP: Lcore 1 is writing to port 0
APP: Lcore 2 is working to port 0
APP: Lcore 3 is sending to port 0
APP: Lcore 0 is reading from port 0

configure IP and MAC addresses

upeth.sh will read the nic information in the ethinfo, and then configure IP and MAC address for vEth0.

# ./upeth.sh
APP: Configure network interface of 0 up

Now, you can test the dns server.

stop program

# ./stop.sh

unbind dpdk

# ./unbind.sh

traffic monitoring

# ./monitor.sh
port:0  rx:399910 p/s  31994168 bytes/s  tx:397452 p/s  36577360 bytes/s  dropped:0
port:0  rx:400474 p/s  32039324 bytes/s  tx:400478 p/s  36843976 bytes/s  dropped:0
port:0  rx:396535 p/s  31724162 bytes/s  tx:396478 p/s  36475976 bytes/s  dropped:0
port:0  rx:401855 p/s  32149828 bytes/s  tx:399069 p/s  36729068 bytes/s  dropped:0

Support edns

dig @192.168.44.129 www.baidu.com +subnet=1.2.3.4

; <<>> DiG 9.11.1-P3 <<>> @192.168.44.129 www.baidu.com +subnet=1.2.3.4
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28688
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
; CLIENT-SUBNET: 1.2.3.4/32/0
;; QUESTION SECTION:
;www.baidu.com.	IN	A

;; ANSWER SECTION:
www.baidu.com. 0	IN	A	153.37.234.35

;; Query time: 0 msec
;; SERVER: 192.168.44.129#53(192.168.44.129)
;; WHEN: Tue Jul 18 17:02:16 CST 2017
;; MSG SIZE  rcvd: 82

Get Help

The fastest way to get response is to send email to my mail:

License

Please refer to LICENSE file.

Releases

No releases published

Packages

No packages published

Languages