func NewTestHandler(config Config, p net.PacketConn) (c *Handler, conn *marp.Client, err error) {
	c = newHandler(config)
	c.table = newARPTable()  
	ifi, err := net.InterfaceByName(config.NIC)
	if err != nil {
		return nil, nil, fmt.Errorf("InterfaceByName error: %w", err)
	}
	if p == nil {
		p = &bufferedPacketConn{channel: make(chan []byte, 32)}
	}
	if c.client, err = marp.New(ifi, p); err != nil {
		return nil, nil, err
	}
	return c, c.client, nil
}
NewTestHandler allow you to pass a PacketConn. Useful for testing
if p is nil, auto create a bufferedPacketConn
package arp
import (
	"fmt"
	"net"
	"sync"
	"time"
	marp "github.com/mdlayher/arp"
)
type bufferedPacketConn struct {
	channel chan []byte
	closed  bool
}