1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
package tap
import (
"encoding/binary"
)
type protocol interface {
Stream() bool
}
type streamProtocol interface {
protocol
Buf() []byte
Write(buf []byte, size int)
Read(buf []byte) int
}
type hyperkitProtocol struct {
}
func (s *hyperkitProtocol) Stream() bool {
return true
}
func (s *hyperkitProtocol) Buf() []byte {
return make([]byte, 2)
}
func (s *hyperkitProtocol) Write(buf []byte, size int) {
binary.LittleEndian.PutUint16(buf, uint16(size))
}
func (s *hyperkitProtocol) Read(buf []byte) int {
return int(binary.LittleEndian.Uint16(buf[0:2]))
}
type qemuProtocol struct {
}
func (s *qemuProtocol) Stream() bool {
return true
}
func (s *qemuProtocol) Buf() []byte {
return make([]byte, 4)
}
func (s *qemuProtocol) Write(buf []byte, size int) {
binary.BigEndian.PutUint32(buf, uint32(size))
}
func (s *qemuProtocol) Read(buf []byte) int {
return int(binary.BigEndian.Uint32(buf[0:4]))
}
type bessProtocol struct {
}
func (s *bessProtocol) Stream() bool {
return false
}
type vfkitProtocol struct {
}
func (s *vfkitProtocol) Stream() bool {
return false
}
|