add scripts and tuntap.c
This commit is contained in:
		
										
											Binary file not shown.
										
									
								
							| @@ -0,0 +1 @@ | |||||||
|  |  | ||||||
							
								
								
									
										
											BIN
										
									
								
								Blatt02/assets/image-20241110210209022.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Blatt02/assets/image-20241110210209022.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 14 KiB | 
							
								
								
									
										71
									
								
								Blatt02/scripts/103.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								Blatt02/scripts/103.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,71 @@ | |||||||
|  | #!/bin/bash | ||||||
|  |  | ||||||
|  | bash /home/rnp/2/101.sh | ||||||
|  |  | ||||||
|  | echo "Now running 103.sh" | ||||||
|  |  | ||||||
|  | assign_vlan(){ | ||||||
|  | 	local dev=$1 | ||||||
|  | 	local eth=$2 | ||||||
|  | 	local id=$3 | ||||||
|  | 	local ip=$4 | ||||||
|  | 	ssh $dev "ip link add link $eth name $eth.$id type vlan id $id" | ||||||
|  | 	ssh $dev "ip link set dev $eth.$id up" | ||||||
|  | 	ssh $dev "ip addr flush dev $eth" | ||||||
|  | 	ssh $dev "ip addr add $ip dev $eth.$id" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | assign_vlan "router4" "eth1" "100" "10.5.1.4/24" | ||||||
|  | assign_vlan "pc3" "eth1" "100" "10.5.1.3/24" | ||||||
|  | assign_vlan "pc2" "eth1" "200" "10.5.1.2/24" | ||||||
|  | assign_vlan "pc1" "eth1" "200" "10.5.1.1/24" | ||||||
|  |  | ||||||
|  | ping_dev(){ | ||||||
|  | 	local dev=$1 | ||||||
|  | 	local ip=$2 | ||||||
|  | 	local eth_n=$3 | ||||||
|  | 	# ssh "$dev" $cmd  | ||||||
|  | 	loss=$(ssh $dev "ping -c 5 -W 2 -I eth$eth_n $ip | awk -F', ' '/packet loss/ {print \$3}' | awk '{print int(\$1)}'") | ||||||
|  | 	echo $loss | ||||||
|  | } | ||||||
|  |  | ||||||
|  | check(){ | ||||||
|  | 	local dev1=$1 | ||||||
|  | 	local dev2=$2 | ||||||
|  | 	local ping_loss=$3 | ||||||
|  | 	local num=$4 | ||||||
|  | 	echo $ping_loss | ||||||
|  | 	if [ $ping_loss -eq $num ]; then | ||||||
|  | 		echo -e "from $dev1 to $dev2: \t yes" | ||||||
|  | 	else | ||||||
|  | 		echo -e "from $dev1 to $dev2: \t no" | ||||||
|  | 	fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | loss=$(ping_dev "router4" "10.5.1.1" "1.100") | ||||||
|  | check "router4" "pc1" "$loss" 100 | ||||||
|  | loss=$(ping_dev "router4" "10.5.1.2" "1.100") | ||||||
|  | check "router4" "pc2" "$loss" 100 | ||||||
|  | loss=$(ping_dev "router4" "10.5.1.3" "1.100") | ||||||
|  | check "router4" "pc3" "$loss" 0 | ||||||
|  |  | ||||||
|  | loss=$(ping_dev "pc1" "10.5.1.2" "1.200") | ||||||
|  | check "pc1" "pc2" "$loss" 0 | ||||||
|  | loss=$(ping_dev "pc1" "10.5.1.3" "1.200") | ||||||
|  | check "pc1" "pc3" "$loss" 100 | ||||||
|  | loss=$(ping_dev "pc1" "10.5.1.4" "1.200") | ||||||
|  | check "pc1" "router4" "$loss" 100 | ||||||
|  |  | ||||||
|  | loss=$(ping_dev "pc2" "10.5.1.1" "1.200") | ||||||
|  | check "pc2" "pc1" "$loss" 0 | ||||||
|  | loss=$(ping_dev "pc2" "10.5.1.3" "1.200") | ||||||
|  | check "pc2" "pc3" "$loss" 100 | ||||||
|  | loss=$(ping_dev "pc2" "10.5.1.4" "1.200") | ||||||
|  | check "pc2" "router4" "$loss" 100 | ||||||
|  |  | ||||||
|  | loss=$(ping_dev "pc3" "10.5.1.1" "1.100") | ||||||
|  | check "pc3" "pc1" "$loss" 100 | ||||||
|  | loss=$(ping_dev "pc3" "10.5.1.2" "1.100") | ||||||
|  | check "pc3" "pc2" "$loss" 100 | ||||||
|  | loss=$(ping_dev "pc3" "10.5.1.4" "1.100") | ||||||
|  | check "pc3" "router4" "$loss" 0 | ||||||
							
								
								
									
										87
									
								
								Blatt02/tuntap.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								Blatt02/tuntap.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,87 @@ | |||||||
|  | #include <assert.h> | ||||||
|  | #include <sys/ioctl.h> | ||||||
|  | #include <net/if.h> | ||||||
|  | #include <linux/if_tun.h> | ||||||
|  | #include <sys/types.h> | ||||||
|  | #include <sys/stat.h> | ||||||
|  | #include <fcntl.h> | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <string.h> | ||||||
|  | #include <unistd.h> | ||||||
|  | #include <stdint.h> | ||||||
|  |  | ||||||
|  | #define CLEAR(x) memset(&(x), 0x00, sizeof(x)) | ||||||
|  |  | ||||||
|  | #define IFNAME "tap0" | ||||||
|  |  | ||||||
|  | #define BUFLEN 1600 | ||||||
|  |  | ||||||
|  | static int tun_alloc(char *dev) | ||||||
|  | { | ||||||
|  |     struct ifreq ifr; | ||||||
|  |     int fd, err; | ||||||
|  |  | ||||||
|  |     if( (fd = open("/dev/net/tun", O_RDWR)) < 0 ) { | ||||||
|  |         perror("Cannot open TUN/TAP dev\n" | ||||||
|  |                     "Make sure one exists with " | ||||||
|  |                     "'$ mknod /dev/net/tun c 10 200'"); | ||||||
|  |         exit(1); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     CLEAR(ifr); | ||||||
|  |  | ||||||
|  |     /* Flags: IFF_TUN   - TUN device (no Ethernet headers) | ||||||
|  |      *        IFF_TAP   - TAP device | ||||||
|  |      * | ||||||
|  |      *        IFF_NO_PI - Do not provide packet information | ||||||
|  |      */ | ||||||
|  |     ifr.ifr_flags = IFF_TAP | IFF_NO_PI; | ||||||
|  |     if( *dev ) { | ||||||
|  |         strncpy(ifr.ifr_name, dev, IFNAMSIZ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     if( (err = ioctl(fd, TUNSETIFF, (void *) &ifr)) < 0 ){ | ||||||
|  |         perror("ERR: Could not ioctl tun"); | ||||||
|  |         close(fd); | ||||||
|  |         return err; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     strcpy(dev, ifr.ifr_name); | ||||||
|  |     return fd; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | int main(int argc, char** argv) { | ||||||
|  |  | ||||||
|  |   char dev[IFNAMSIZ]; | ||||||
|  |   int tun_fd; | ||||||
|  |  | ||||||
|  |   if (argc > 1) { | ||||||
|  |     assert(strlen(argv[1]) < IFNAMSIZ); | ||||||
|  |     strcpy(dev, argv[1]); | ||||||
|  |   } else { | ||||||
|  |     strcpy(dev, IFNAME); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   printf("device name: %s\n", dev); | ||||||
|  |  | ||||||
|  |   tun_fd = tun_alloc(dev); | ||||||
|  |  | ||||||
|  |   int running = 1; | ||||||
|  |  | ||||||
|  |   uint8_t buf[BUFLEN]; | ||||||
|  |   while (running) { | ||||||
|  |     int nread; | ||||||
|  |  | ||||||
|  |     if ((nread = read(tun_fd, buf, BUFLEN)) < 0) { | ||||||
|  |       perror("ERR: Read from tun_fd"); | ||||||
|  |       break; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     printf("Read %d bytes from device %s\n", nread, dev); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   close(tun_fd); | ||||||
|  |  | ||||||
|  |   return EXIT_SUCCESS; | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user