diff --git a/capture-from-socket.bat b/capture-from-socket.bat
new file mode 100644
index 0000000000000000000000000000000000000000..6d750a21bd9bd1bbd889bc589e78c3ba5982b1f5
--- /dev/null
+++ b/capture-from-socket.bat
@@ -0,0 +1,18 @@
+@echo off
+
+REM start a remote capture session using the provided live capture 
+REM tcp port as defined in UWM
+REM adapt path to Wireshark and NetCat (nc.exe) binaries
+REM 
+REM NetCat for Windows can be found, e.g. at: https://nmap.org/ncat/
+REM
+REM sebastian.rieger@cs.hs-fulda.de
+
+if -%1-==-- echo live capture tcp port not provided, please start as "capture-from-socket.bat <tcp-live-capture-port>" & exit /b
+
+set NETCAT_PATH="C:\Users\Sebastian\Downloads\ncat"
+set WIRESHARK_PATH="C:\Program Files\Wireshark\Wireshark.exe"
+set VIRL_HOST="192.168.0.100"
+set PCAP_PORT="%1"
+
+start cmd /C "echo reading live capture from port %1, close Wireshark, to stop ... & %NETCAT_PATH% %VIRL_HOST% %PCAP_PORT% | %WIRESHARK_PATH% -k -i -"
diff --git a/create-arista-veos-image/create-arista-veos-image.sh b/create-arista-veos-image/create-arista-veos-image.sh
new file mode 100644
index 0000000000000000000000000000000000000000..01698957bc0b321c649de3fe8e4aed8755d079fe
--- /dev/null
+++ b/create-arista-veos-image/create-arista-veos-image.sh
@@ -0,0 +1,152 @@
+#!/bin/bash
+# create-arista-veos-image.sh V1.1
+# HS-Fulda - sebastian.rieger@informatik.hs-fulda.de
+#
+# changelog:
+# V1.1  added injection of config defined in VM Maestro using config-drivex
+
+# usage
+if [ ! $# -eq 3 ] ; then
+  echo -e "usage: $0 <Aboot-veos-serial-version.iso> <vEOS-version.vmdk> <new glance image name>, e.g.:\n"
+  echo "$0 Aboot-veos-serial-2.0.8.iso vEOS-4.13.4F.vmdk vEOS"
+  exit -1
+fi
+
+# sudo check
+if [ ! $UID -eq 0 ] ; then
+  echo "Insufficient privileges. Please consider using sudo -s."
+  exit -1
+fi
+
+ABOOT_SERIAL_ISO=$1
+ABOOT_SERIAL_ISO_BASENAME=$(basename -s .iso $1)
+VEOS_VMDK=$2
+VEOS_VMDK_BASENAME=$(basename -s .vmdk $2)
+GLANCE_IMAGE_NAME=$3
+GLANCE_IMAGE_RELEASE=$VEOS_VMDK_BASENAME-$ABOOT_SERIAL_ISO_BASENAME
+TMP_NAME="vEOS-$GLANCE_IMAGE_RELEASE"
+
+echo
+echo "Creating vEOS image..."
+echo "==========================================================="
+
+# create a copy of Aboot bootloader and extend it to 3G
+cp $1 $TMP_NAME.raw
+truncate -s +3G $TMP_NAME.raw
+
+echo
+echo "Extracting partitions from vEOS vmdk..."
+echo "==========================================================="
+
+# convert vmdk to raw and extract two partitions in it
+qemu-img convert -O raw $2 $VEOS_VMDK_BASENAME.raw
+kpartx -av $VEOS_VMDK_BASENAME.raw
+dd if=/dev/loop0p1 of=$VEOS_VMDK_BASENAME-p1.raw
+dd if=/dev/loop0p2 of=$VEOS_VMDK_BASENAME-p2.raw
+kpartx -d $VEOS_VMDK_BASENAME.raw
+
+echo
+echo "Injecting rc.eos startup script to get switch config..."
+echo "==========================================================="
+
+# inject rc.eos script in first partition of the image, to get switch config defined in VM Maestro (config-drive)
+mkdir swi
+mount -o loop $VEOS_VMDK_BASENAME-p1.raw swi
+cd swi
+cat << EOF > rc.eos
+#!/bin/sh
+#
+# startup script to get node configs from VM Maestro
+#
+
+echo "Getting switch config from config drive..."
+echo "=========================================="
+mkdir /config-drive
+mount /dev/sdb1 /config-drive
+
+echo "Getting ip address for ma1 via dhcp..."
+echo "=========================================="
+dhclient -r ma1
+dhclient -1 -v ma1 >/mnt/flash/dhclient.log
+IP=\$(ip addr show ma1 | grep inet | tr -s ' ' | cut -d ' ' -f 3 | sed s/"\/"/"\\\\\\\\\/"/g)
+echo \$IP
+sed s/"! ip of ma1 configured on launch"/"ip address \$IP"/g /config-drive/veos_config.txt >/mnt/flash/startup-config.tmp
+cat /mnt/flash/startup-config.tmp
+echo
+
+echo "Copying switch config from config drive..."
+echo "=========================================="
+cp /mnt/flash/startup-config.tmp /mnt/flash/startup-config
+EOF
+chmod 755 rc.eos
+cd ..
+umount swi
+rmdir swi
+
+echo
+echo "Injecting new partitions from vEOS vmdk in Aboot image..."
+echo "==========================================================="
+
+# calulate size of the two partitions
+PART1_START=$(fdisk -l $VEOS_VMDK_BASENAME.raw | grep "\.raw1" | tr -s " " | cut -d ' ' -f 3)
+PART1_END=$(fdisk -l $VEOS_VMDK_BASENAME.raw | grep "\.raw1" | tr -s " " | cut -d ' ' -f 4)
+PART1_LENGTH=$(expr $PART1_END - $PART1_START)
+
+PART2_START=$(fdisk -l $VEOS_VMDK_BASENAME.raw | grep "\.raw2" | tr -s " " | cut -d ' ' -f 2)
+PART2_END=$(fdisk -l $VEOS_VMDK_BASENAME.raw | grep "\.raw2" | tr -s " " | cut -d ' ' -f 3)
+PART2_LENGTH=$(expr $PART2_END - $PART2_START)
+
+# append the two partitions from vmdk in the bootloader iso
+echo -e "n
+p
+
+
++$PART1_LENGTH
+t
+2
+c
+a
+2
+n
+p
+
+
++$PART2_LENGTH
+t
+3
+12
+w" | fdisk $TMP_NAME.raw >/dev/null
+
+# copy the partitions from vEOS vmdk to new image 
+kpartx -av $TMP_NAME.raw
+dd if=$VEOS_VMDK_BASENAME-p1.raw of=/dev/loop0p2
+dd if=$VEOS_VMDK_BASENAME-p2.raw of=/dev/loop0p3
+kpartx -d $TMP_NAME.raw
+
+echo
+echo "Convert new image to qcow2..."
+echo "==========================================================="
+
+# convert raw to qcow2
+qemu-img convert -O qcow2 $TMP_NAME.raw $TMP_NAME.qcow2
+
+echo
+echo "Cleaning up..."
+echo "==========================================================="
+
+#cleanup
+rm $TMP_NAME.raw
+rm $VEOS_VMDK_BASENAME-p1.raw
+rm $VEOS_VMDK_BASENAME-p2.raw
+rm $VEOS_VMDK_BASENAME.raw
+
+echo
+echo "Importing image into glance..."
+echo "==========================================================="
+glance image-create --container-format bare --disk-format qcow2 --is-public true --name $GLANCE_IMAGE_NAME --file $TMP_NAME.qcow2 --property hw_disk_bus=ide --property serial=1 --property hw_vif_model=e1000 --property hw_cdrom_type=ide --property release="$GLANCE_IMAGE_RELEASE" --property subtype=IOSv --property config_disk_type=disk
+
+#testing:
+#
+#  nova boot --image "Arista vEOS Disk" --flavor m1.small veos --nic net-id=abc7ad47-55fd-4396-8d31-91dd4d41a18a --nic net-id=abc7ad47-55fd-4396-8d31-91dd4d41a18a --nic net-id=abc7ad47-55fd-4396-8d31-91dd4d41a18a --nic net-id=abc7ad47-55fd-4396-8d31-91dd4d41a18a --nic net-id=abc7ad47-55fd-4396-8d31-91dd4d41a18a
+#
+#  using VM Maestro, the image can be chosen as "VM image", e.g., for an IOSv or IOSvL2 node
diff --git a/create-arista-veos-image/dynamic-subtype-vEOS.json b/create-arista-veos-image/dynamic-subtype-vEOS.json
new file mode 100644
index 0000000000000000000000000000000000000000..d277bbd9884533b1ff155171890c379028eed31f
--- /dev/null
+++ b/create-arista-veos-image/dynamic-subtype-vEOS.json
@@ -0,0 +1,22 @@
+{
+  "dynamic-subtypes": [
+    {
+      "plugin_name": "vEOS", 
+      "cli_serial": 1, 
+      "plugin_desc": "Arista vEOS", 
+      "cli_protocol": "ssh", 
+      "hw_ram": 1024, 
+      "hw_vm_extra": "", 
+      "interface_wrap": 7, 
+      "baseline_image": "vEOS", 
+      "hw_disk_bus": "ide", 
+      "interface_pattern": "Ethernet{0}", 
+      "config_file": "/veos_config.txt", 
+      "baseline_flavor": "vEOS.small", 
+      "plugin_base": "IOSvL2", 
+      "vnc_available": true, 
+      "interface_management": "Management1", 
+      "interface_range": 7
+    }
+  ]
+}
\ No newline at end of file
diff --git a/create-arista-veos-image/minimal-config-vEOS.txt b/create-arista-veos-image/minimal-config-vEOS.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f2d1b38f858b3224cc172bb4a8af2abd9faeadc8
--- /dev/null
+++ b/create-arista-veos-image/minimal-config-vEOS.txt
@@ -0,0 +1,28 @@
+! device: veos-1 (vEOS, EOS-4.14.2F)
+!
+! boot system flash:/vEOS.swi
+!
+transceiver qsfp default-mode 4x10G
+!
+hostname veos-1
+!
+spanning-tree mode mstp
+!
+no aaa root
+!
+username admin role network-admin secret 5
+$1$93LlZesx$MSqS1D/8NGTSY724FGx1K0
+username cisco role network-admin secret 5
+$1$rQS0W9wP$ZUzVG2XoGCCZCJopFp1aV/
+!
+interface Ethernet1
+!
+interface Ethernet2
+!
+interface Management1
+  ! ip of ma1 configured on launch
+!
+no ip routing
+!
+!
+end
\ No newline at end of file