diff --git a/core/core_server.go b/core/core_server.go
index 39f4ca7..9e609c5 100644
--- a/core/core_server.go
+++ b/core/core_server.go
@@ -198,6 +198,31 @@
 				errchan <- err
 				return
 			}
+
+			if s.Mode == BOTH {
+				go func() {
+					defer func() {
+						log.Println("exeDHCPTest Done")
+					}()
+					info, err := s.identifyNniIoinfo("outside")
+					setup.ActivateDHCPServer(info.name, s.DhcpServerIP)
+
+					infos, err := s.getUniIoinfos("outside")
+					if err != nil {
+						errchan <- err
+						return
+					}
+					univeths := []string{}
+					for _, info := range infos {
+						univeths = append(univeths, info.name)
+					}
+					err = s.exeDHCPTest(univeths)
+					if err != nil {
+						errchan <- err
+						return
+					}
+				}()
+			}
 		}()
 		wg.Wait()
 		tearDown(vethenv) // Grace teardown
@@ -315,6 +340,25 @@
 	return nil
 }
 
+func (s *Server) exeDHCPTest(vethenv []string) error {
+	log.Println("exeDHCPTest Start")
+	for i := 0; i < s.DhcpWait; i++ {
+		select {
+		case <-s.Endchan:
+			log.Println("exeDHCPTest thread receives close !")
+			return nil
+		default:
+			log.Println("exeDHCPTest is now sleeping....")
+			time.Sleep(time.Second)
+		}
+	}
+	err := setup.ActivateDHCPClients(vethenv)
+	if err != nil {
+		return err
+	}
+	return nil
+}
+
 func (s *Server) onuPacketOut(intfid uint32, onuid uint32, rawpkt gopacket.Packet) error {
 	layerEth := rawpkt.Layer(layers.LayerTypeEthernet)
 	if layerEth != nil {
diff --git a/core/io_worker.go b/core/io_worker.go
index a535869..d512b01 100644
--- a/core/io_worker.go
+++ b/core/io_worker.go
@@ -73,8 +73,8 @@
 			return retpkt, vid, nil
 		}
 	}
-	//return pkt, 1, nil
-	return nil, 0, errors.New("failed to pop vlan")
+	return pkt, 0, nil
+	//return nil, 0, errors.New("failed to pop vlan")
 }
 
 func PushVLAN(pkt gopacket.Packet, vid uint16) (gopacket.Packet, error) {
diff --git a/setup/setup_env.go b/setup/setup_env.go
index a4210f5..c391875 100644
--- a/setup/setup_env.go
+++ b/setup/setup_env.go
@@ -37,6 +37,15 @@
 	return nil
 }
 
+func ActivateDHCPClients(vethnames []string) error {
+	for _, vethname := range vethnames {
+		if err := activateDHCPClient(vethname); err != nil {
+			return err
+		}
+	}
+	return nil
+}
+
 func KillAllWPASups() error {
 	err := exec.Command("pkill", "wpa_supplicant").Run()
 	if err != nil {
@@ -107,4 +116,33 @@
 	}
 	log.Printf("activateWPASupplicant() for :%s\n", vethname)
 	return
-}
\ No newline at end of file
+}
+
+func activateDHCPClient(vethname string) (err error) {
+	cmd := "/usr/local/bin/dhclient"
+	err = exec.Command(cmd, vethname).Start()
+	if err != nil {
+		log.Printf("[ERROR] Faile to activateWPASupplicant() for :%s %v\n", vethname, err)
+		return
+	}
+	log.Printf("activateDHCPClient()\n", vethname)
+	return
+}
+
+func ActivateDHCPServer(veth string, serverip string) {
+	cmd := "/sbin/ifconfig"
+	err := exec.Command(cmd, veth, serverip, "up").Run()
+	if err != nil {
+		log.Printf("[ERROR] Fail to up %s()\n", veth, err)
+		return
+	}
+	cmd = "/usr/local/bin/dhcpd"
+	conf := "/etc/dhcp/dhcpd.conf"
+	err = exec.Command(cmd, "-cf", conf, veth).Run()
+	if err != nil {
+		log.Printf("[ERROR] Fail to activateDHCP Server ()\n", err)
+		return
+	}
+	log.Printf("Activate DHCP Server()\n")
+	return
+}
