aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2015-12-11 19:50:21 +0100
committerDmitry Vyukov <dvyukov@google.com>2015-12-17 14:38:46 +0100
commit6f71e5dce1817676a47fc7b92f7d288e4094f614 (patch)
tree696068b0d1735504d9d5e44615f4a6fa951f8390
parent6922b20d36c85dfc02126c323d5de936ede9453c (diff)
sys: add PF_NFC support
-rw-r--r--executor/syscalls.h11
-rw-r--r--prog/consts.go16
-rw-r--r--sys/decl.go4
-rw-r--r--sys/sys.go33
-rw-r--r--sys/sys.txt82
-rw-r--r--sysgen/sysgen.go4
6 files changed, 149 insertions, 1 deletions
diff --git a/executor/syscalls.h b/executor/syscalls.h
index fb00ee822..61a92476f 100644
--- a/executor/syscalls.h
+++ b/executor/syscalls.h
@@ -595,4 +595,15 @@ call_t syscalls[] = {
{"sendmmsg$alg", __NR_sendmmsg},
{"recvmsg$alg", __NR_recvmsg},
{"recvmmsg$alg", __NR_recvmmsg},
+ {"socket$nfc_llcp", __NR_socket},
+ {"bind$nfc_llcp", __NR_bind},
+ {"connect$nfc_llcp", __NR_connect},
+ {"accept$nfc_llcp", __NR_accept},
+ {"setsockopt$NFC_LLCP_RW", __NR_setsockopt},
+ {"setsockopt$NFC_LLCP_MIUX", __NR_setsockopt},
+ {"getsockopt$nfc_llcp", __NR_getsockopt},
+ {"sendmsg$nfc_llcp", __NR_sendmsg},
+ {"sendmmsg$nfc_llcp", __NR_sendmmsg},
+ {"socket$nfc_raw", __NR_socket},
+ {"connect$nfc_raw", __NR_connect},
};
diff --git a/prog/consts.go b/prog/consts.go
index 999c8d784..949b6a852 100644
--- a/prog/consts.go
+++ b/prog/consts.go
@@ -15,6 +15,7 @@ const (
AF_IPX = 4
AF_LOCAL = 1
AF_NETLINK = 16
+ AF_NFC = 39
AF_PACKET = 17
AF_X25 = 9
ALG_SET_AEAD_ASSOCLEN = 4
@@ -635,6 +636,20 @@ const (
MS_STRICTATIME = 16777216
MS_SYNC = 4
MS_SYNCHRONOUS = 16
+ NFC_LLCP_MIUX = 1
+ NFC_LLCP_REMOTE_LTO = 3
+ NFC_LLCP_REMOTE_MIU = 2
+ NFC_LLCP_REMOTE_RW = 4
+ NFC_LLCP_RW = 0
+ NFC_PROTO_FELICA = 3
+ NFC_PROTO_ISO14443 = 4
+ NFC_PROTO_ISO14443_B = 6
+ NFC_PROTO_ISO15693 = 7
+ NFC_PROTO_JEWEL = 1
+ NFC_PROTO_MIFARE = 2
+ NFC_PROTO_NFC_DEP = 5
+ NFC_SOCKPROTO_LLCP = 1
+ NFC_SOCKPROTO_RAW = 0
NT_386_IOPERM = 513
NT_386_TLS = 512
NT_AUXV = 6
@@ -880,6 +895,7 @@ const (
SOCK_SEQPACKET = 5
SOCK_STREAM = 1
SOL_ALG = 279
+ SOL_NFC = 280
SOL_SOCKET = 1
SO_ACCEPTCONN = 30
SO_ATTACH_BPF = 50
diff --git a/sys/decl.go b/sys/decl.go
index 93d7fccea..61838bc7d 100644
--- a/sys/decl.go
+++ b/sys/decl.go
@@ -83,6 +83,8 @@ const (
FdUserFault
FdAlg
FdAlgConn
+ FdNfcRaw
+ FdNfcLlcp
IPCMsq
IPCSem
@@ -187,7 +189,7 @@ func (t ResourceType) SubKinds() []ResourceSubkind {
return []ResourceSubkind{FdFile, FdSock, FdPipe, FdSignal, FdEvent,
FdTimer, FdEpoll, FdDir, FdMq, FdInotify, FdFanotify, FdTty,
FdDRI, FdFuse, FdKdbus, FdBpfMap, FdBpfProg, FdPerf, FdUserFault,
- FdAlg, FdAlgConn}
+ FdAlg, FdAlgConn, FdNfcRaw, FdNfcLlcp}
case ResIPC:
return []ResourceSubkind{IPCMsq, IPCSem, IPCShm}
case ResIOCtx, ResKey, ResInotifyDesc, ResPid, ResUid, ResGid, ResTimerid:
diff --git a/sys/sys.go b/sys/sys.go
index d55c8c7a6..cf2f8c7ff 100644
--- a/sys/sys.go
+++ b/sys/sys.go
@@ -1692,4 +1692,37 @@ func initCalls() {
func() {
Calls = append(Calls, &Call{ID: 563, Name: "recvmmsg$alg", CallName: "recvmmsg", Args: []Type{ResourceType{TypeCommon: TypeCommon{TypeName: "fd", IsOptional: false}, Kind: ResFD, Subkind: FdAlgConn}, PtrType{TypeCommon: TypeCommon{TypeName: "mmsg", IsOptional: false}, Type: ArrayType{TypeCommon: TypeCommon{TypeName: "", IsOptional: false}, Type: StructType{TypeCommon: TypeCommon{TypeName: "alg_recv_msghdr", IsOptional: false}, Fields: []Type{ConstType{TypeCommon: TypeCommon{TypeName: "addr", IsOptional: false}, TypeSize: 8, Val: uintptr(0)}, ConstType{TypeCommon: TypeCommon{TypeName: "addrlen", IsOptional: false}, TypeSize: 4, Val: uintptr(0)}, PtrType{TypeCommon: TypeCommon{TypeName: "vec", IsOptional: false}, Type: ArrayType{TypeCommon: TypeCommon{TypeName: "", IsOptional: false}, Type: StructType{TypeCommon: TypeCommon{TypeName: "iovec_out", IsOptional: false}, Fields: []Type{PtrType{TypeCommon: TypeCommon{TypeName: "addr", IsOptional: false}, Dir: DirOut, Type: BufferType{TypeCommon: TypeCommon{TypeName: "addr", IsOptional: false}, Kind: BufferBlob}}, LenType{TypeCommon: TypeCommon{TypeName: "len", IsOptional: false}, Buf: "addr", TypeSize: 8}}}}, Dir: DirIn}, LenType{TypeCommon: TypeCommon{TypeName: "vlen", IsOptional: false}, Buf: "vec", TypeSize: 8}, PtrType{TypeCommon: TypeCommon{TypeName: "ctrl", IsOptional: false}, Dir: DirOut, Type: BufferType{TypeCommon: TypeCommon{TypeName: "ctrl", IsOptional: false}, Kind: BufferBlob}}, LenType{TypeCommon: TypeCommon{TypeName: "ctrllen", IsOptional: false}, Buf: "ctrl", TypeSize: 8}, IntType{TypeCommon: TypeCommon{TypeName: "f", IsOptional: false}, TypeSize: 4}}}}, Dir: DirIn}, LenType{TypeCommon: TypeCommon{TypeName: "vlen", IsOptional: false}, Buf: "mmsg", TypeSize: 0}, FlagsType{TypeCommon: TypeCommon{TypeName: "f", IsOptional: false}, TypeSize: 0, Vals: []uintptr{1073741824, 64, 8192, 1, 2, 32, 256, 65536}}}})
}()
+ func() {
+ Calls = append(Calls, &Call{ID: 564, Name: "socket$nfc_llcp", CallName: "socket", Ret: ResourceType{TypeCommon: TypeCommon{TypeName: "ret", IsOptional: false}, Kind: ResFD, Subkind: FdNfcLlcp}, Args: []Type{ConstType{TypeCommon: TypeCommon{TypeName: "domain", IsOptional: false}, TypeSize: 0, Val: uintptr(39)}, FlagsType{TypeCommon: TypeCommon{TypeName: "type", IsOptional: false}, TypeSize: 0, Vals: []uintptr{1, 2, 3}}, ConstType{TypeCommon: TypeCommon{TypeName: "proto", IsOptional: false}, TypeSize: 0, Val: uintptr(1)}}})
+ }()
+ func() {
+ Calls = append(Calls, &Call{ID: 565, Name: "bind$nfc_llcp", CallName: "bind", Args: []Type{ResourceType{TypeCommon: TypeCommon{TypeName: "fd", IsOptional: false}, Kind: ResFD, Subkind: FdNfcLlcp}, PtrType{TypeCommon: TypeCommon{TypeName: "addr", IsOptional: false}, Type: StructType{TypeCommon: TypeCommon{TypeName: "sockaddr_nfc_llcp", IsOptional: false}, Fields: []Type{ConstType{TypeCommon: TypeCommon{TypeName: "family", IsOptional: false}, TypeSize: 2, Val: uintptr(39)}, IntType{TypeCommon: TypeCommon{TypeName: "devidx", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "target", IsOptional: false}, TypeSize: 4}, FlagsType{TypeCommon: TypeCommon{TypeName: "proto", IsOptional: false}, TypeSize: 4, Vals: []uintptr{1, 2, 3, 4, 5, 6, 7}}, IntType{TypeCommon: TypeCommon{TypeName: "dsap", IsOptional: false}, TypeSize: 1}, IntType{TypeCommon: TypeCommon{TypeName: "ssap", IsOptional: false}, TypeSize: 1}, IntType{TypeCommon: TypeCommon{TypeName: "serv0", IsOptional: false}, TypeSize: 1}, IntType{TypeCommon: TypeCommon{TypeName: "serv1", IsOptional: false}, TypeSize: 1}, IntType{TypeCommon: TypeCommon{TypeName: "serv2", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv3", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv4", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv5", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv6", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv7", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv8", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv9", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv10", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv11", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv12", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv13", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv14", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv15", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv16", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv17", IsOptional: false}, TypeSize: 1}, IntType{TypeCommon: TypeCommon{TypeName: "servlen", IsOptional: false}, TypeSize: 8}}}, Dir: DirIn}, LenType{TypeCommon: TypeCommon{TypeName: "addrlen", IsOptional: false}, Buf: "addr", TypeSize: 0}}})
+ }()
+ func() {
+ Calls = append(Calls, &Call{ID: 566, Name: "connect$nfc_llcp", CallName: "connect", Args: []Type{ResourceType{TypeCommon: TypeCommon{TypeName: "fd", IsOptional: false}, Kind: ResFD, Subkind: FdNfcLlcp}, PtrType{TypeCommon: TypeCommon{TypeName: "addr", IsOptional: false}, Type: StructType{TypeCommon: TypeCommon{TypeName: "sockaddr_nfc_llcp", IsOptional: false}, Fields: []Type{ConstType{TypeCommon: TypeCommon{TypeName: "family", IsOptional: false}, TypeSize: 2, Val: uintptr(39)}, IntType{TypeCommon: TypeCommon{TypeName: "devidx", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "target", IsOptional: false}, TypeSize: 4}, FlagsType{TypeCommon: TypeCommon{TypeName: "proto", IsOptional: false}, TypeSize: 4, Vals: []uintptr{1, 2, 3, 4, 5, 6, 7}}, IntType{TypeCommon: TypeCommon{TypeName: "dsap", IsOptional: false}, TypeSize: 1}, IntType{TypeCommon: TypeCommon{TypeName: "ssap", IsOptional: false}, TypeSize: 1}, IntType{TypeCommon: TypeCommon{TypeName: "serv0", IsOptional: false}, TypeSize: 1}, IntType{TypeCommon: TypeCommon{TypeName: "serv1", IsOptional: false}, TypeSize: 1}, IntType{TypeCommon: TypeCommon{TypeName: "serv2", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv3", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv4", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv5", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv6", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv7", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv8", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv9", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv10", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv11", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv12", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv13", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv14", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv15", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv16", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv17", IsOptional: false}, TypeSize: 1}, IntType{TypeCommon: TypeCommon{TypeName: "servlen", IsOptional: false}, TypeSize: 8}}}, Dir: DirIn}, LenType{TypeCommon: TypeCommon{TypeName: "addrlen", IsOptional: false}, Buf: "addr", TypeSize: 0}}})
+ }()
+ func() {
+ Calls = append(Calls, &Call{ID: 567, Name: "accept$nfc_llcp", CallName: "accept", Ret: ResourceType{TypeCommon: TypeCommon{TypeName: "ret", IsOptional: false}, Kind: ResFD, Subkind: FdNfcLlcp}, Args: []Type{ResourceType{TypeCommon: TypeCommon{TypeName: "fd", IsOptional: false}, Kind: ResFD, Subkind: FdNfcLlcp}, PtrType{TypeCommon: TypeCommon{TypeName: "peer", IsOptional: true}, Type: StructType{TypeCommon: TypeCommon{TypeName: "sockaddr_nfc_llcp", IsOptional: false}, Fields: []Type{ConstType{TypeCommon: TypeCommon{TypeName: "family", IsOptional: false}, TypeSize: 2, Val: uintptr(39)}, IntType{TypeCommon: TypeCommon{TypeName: "devidx", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "target", IsOptional: false}, TypeSize: 4}, FlagsType{TypeCommon: TypeCommon{TypeName: "proto", IsOptional: false}, TypeSize: 4, Vals: []uintptr{1, 2, 3, 4, 5, 6, 7}}, IntType{TypeCommon: TypeCommon{TypeName: "dsap", IsOptional: false}, TypeSize: 1}, IntType{TypeCommon: TypeCommon{TypeName: "ssap", IsOptional: false}, TypeSize: 1}, IntType{TypeCommon: TypeCommon{TypeName: "serv0", IsOptional: false}, TypeSize: 1}, IntType{TypeCommon: TypeCommon{TypeName: "serv1", IsOptional: false}, TypeSize: 1}, IntType{TypeCommon: TypeCommon{TypeName: "serv2", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv3", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv4", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv5", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv6", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv7", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv8", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv9", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv10", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv11", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv12", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv13", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv14", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv15", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv16", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv17", IsOptional: false}, TypeSize: 1}, IntType{TypeCommon: TypeCommon{TypeName: "servlen", IsOptional: false}, TypeSize: 8}}}, Dir: DirOut}, PtrType{TypeCommon: TypeCommon{TypeName: "peerlen", IsOptional: false}, Type: LenType{TypeCommon: TypeCommon{TypeName: "", IsOptional: false}, Buf: "peer", TypeSize: 4}, Dir: DirInOut}}})
+ }()
+ func() {
+ Calls = append(Calls, &Call{ID: 568, Name: "setsockopt$NFC_LLCP_RW", CallName: "setsockopt", Args: []Type{ResourceType{TypeCommon: TypeCommon{TypeName: "fd", IsOptional: false}, Kind: ResFD, Subkind: FdNfcLlcp}, ConstType{TypeCommon: TypeCommon{TypeName: "level", IsOptional: false}, TypeSize: 0, Val: uintptr(280)}, ConstType{TypeCommon: TypeCommon{TypeName: "opt", IsOptional: false}, TypeSize: 0, Val: uintptr(0)}, PtrType{TypeCommon: TypeCommon{TypeName: "arg", IsOptional: false}, Type: IntType{TypeCommon: TypeCommon{TypeName: "", IsOptional: false}, TypeSize: 4}, Dir: DirIn}, LenType{TypeCommon: TypeCommon{TypeName: "arglen", IsOptional: false}, Buf: "arg", TypeSize: 0}}})
+ }()
+ func() {
+ Calls = append(Calls, &Call{ID: 569, Name: "setsockopt$NFC_LLCP_MIUX", CallName: "setsockopt", Args: []Type{ResourceType{TypeCommon: TypeCommon{TypeName: "fd", IsOptional: false}, Kind: ResFD, Subkind: FdNfcLlcp}, ConstType{TypeCommon: TypeCommon{TypeName: "level", IsOptional: false}, TypeSize: 0, Val: uintptr(280)}, ConstType{TypeCommon: TypeCommon{TypeName: "opt", IsOptional: false}, TypeSize: 0, Val: uintptr(1)}, PtrType{TypeCommon: TypeCommon{TypeName: "arg", IsOptional: false}, Type: IntType{TypeCommon: TypeCommon{TypeName: "", IsOptional: false}, TypeSize: 4}, Dir: DirIn}, LenType{TypeCommon: TypeCommon{TypeName: "arglen", IsOptional: false}, Buf: "arg", TypeSize: 0}}})
+ }()
+ func() {
+ Calls = append(Calls, &Call{ID: 570, Name: "getsockopt$nfc_llcp", CallName: "getsockopt", Args: []Type{ResourceType{TypeCommon: TypeCommon{TypeName: "fd", IsOptional: false}, Kind: ResFD, Subkind: FdNfcLlcp}, ConstType{TypeCommon: TypeCommon{TypeName: "level", IsOptional: false}, TypeSize: 0, Val: uintptr(280)}, FlagsType{TypeCommon: TypeCommon{TypeName: "opt", IsOptional: false}, TypeSize: 0, Vals: []uintptr{0, 1, 2, 3, 4}}, PtrType{TypeCommon: TypeCommon{TypeName: "arg", IsOptional: false}, Dir: DirOut, Type: BufferType{TypeCommon: TypeCommon{TypeName: "arg", IsOptional: false}, Kind: BufferBlob}}, LenType{TypeCommon: TypeCommon{TypeName: "arglen", IsOptional: false}, Buf: "arg", TypeSize: 0}}})
+ }()
+ func() {
+ Calls = append(Calls, &Call{ID: 571, Name: "sendmsg$nfc_llcp", CallName: "sendmsg", Args: []Type{ResourceType{TypeCommon: TypeCommon{TypeName: "fd", IsOptional: false}, Kind: ResFD, Subkind: FdNfcLlcp}, PtrType{TypeCommon: TypeCommon{TypeName: "msg", IsOptional: false}, Type: StructType{TypeCommon: TypeCommon{TypeName: "nfc_llcp_send_msghdr", IsOptional: false}, Fields: []Type{PtrType{TypeCommon: TypeCommon{TypeName: "addr", IsOptional: false}, Type: StructType{TypeCommon: TypeCommon{TypeName: "sockaddr_nfc_llcp", IsOptional: false}, Fields: []Type{ConstType{TypeCommon: TypeCommon{TypeName: "family", IsOptional: false}, TypeSize: 2, Val: uintptr(39)}, IntType{TypeCommon: TypeCommon{TypeName: "devidx", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "target", IsOptional: false}, TypeSize: 4}, FlagsType{TypeCommon: TypeCommon{TypeName: "proto", IsOptional: false}, TypeSize: 4, Vals: []uintptr{1, 2, 3, 4, 5, 6, 7}}, IntType{TypeCommon: TypeCommon{TypeName: "dsap", IsOptional: false}, TypeSize: 1}, IntType{TypeCommon: TypeCommon{TypeName: "ssap", IsOptional: false}, TypeSize: 1}, IntType{TypeCommon: TypeCommon{TypeName: "serv0", IsOptional: false}, TypeSize: 1}, IntType{TypeCommon: TypeCommon{TypeName: "serv1", IsOptional: false}, TypeSize: 1}, IntType{TypeCommon: TypeCommon{TypeName: "serv2", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv3", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv4", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv5", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv6", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv7", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv8", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv9", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv10", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv11", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv12", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv13", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv14", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv15", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv16", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv17", IsOptional: false}, TypeSize: 1}, IntType{TypeCommon: TypeCommon{TypeName: "servlen", IsOptional: false}, TypeSize: 8}}}, Dir: DirIn}, LenType{TypeCommon: TypeCommon{TypeName: "addrlen", IsOptional: false}, Buf: "addr", TypeSize: 4}, PtrType{TypeCommon: TypeCommon{TypeName: "vec", IsOptional: false}, Type: ArrayType{TypeCommon: TypeCommon{TypeName: "", IsOptional: false}, Type: StructType{TypeCommon: TypeCommon{TypeName: "iovec_in", IsOptional: false}, Fields: []Type{PtrType{TypeCommon: TypeCommon{TypeName: "addr", IsOptional: false}, Dir: DirIn, Type: BufferType{TypeCommon: TypeCommon{TypeName: "addr", IsOptional: false}, Kind: BufferBlob}}, LenType{TypeCommon: TypeCommon{TypeName: "len", IsOptional: false}, Buf: "addr", TypeSize: 8}}}}, Dir: DirIn}, LenType{TypeCommon: TypeCommon{TypeName: "vlen", IsOptional: false}, Buf: "vec", TypeSize: 8}, PtrType{TypeCommon: TypeCommon{TypeName: "ctrl", IsOptional: false}, Type: StructType{TypeCommon: TypeCommon{TypeName: "cmsghdr", IsOptional: false}, Fields: []Type{IntType{TypeCommon: TypeCommon{TypeName: "len", IsOptional: false}, TypeSize: 8}, IntType{TypeCommon: TypeCommon{TypeName: "level", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "type", IsOptional: false}, TypeSize: 4}}}, Dir: DirIn}, LenType{TypeCommon: TypeCommon{TypeName: "ctrllen", IsOptional: false}, Buf: "ctrl", TypeSize: 8}, FlagsType{TypeCommon: TypeCommon{TypeName: "f", IsOptional: false}, TypeSize: 4, Vals: []uintptr{2048, 4, 64, 128, 32768, 16384, 1}}}}, Dir: DirIn}, FlagsType{TypeCommon: TypeCommon{TypeName: "f", IsOptional: false}, TypeSize: 0, Vals: []uintptr{2048, 4, 64, 128, 32768, 16384, 1}}}})
+ }()
+ func() {
+ Calls = append(Calls, &Call{ID: 572, Name: "sendmmsg$nfc_llcp", CallName: "sendmmsg", Args: []Type{ResourceType{TypeCommon: TypeCommon{TypeName: "fd", IsOptional: false}, Kind: ResFD, Subkind: FdNfcLlcp}, PtrType{TypeCommon: TypeCommon{TypeName: "mmsg", IsOptional: false}, Type: ArrayType{TypeCommon: TypeCommon{TypeName: "", IsOptional: false}, Type: StructType{TypeCommon: TypeCommon{TypeName: "nfc_llcp_send_msghdr", IsOptional: false}, Fields: []Type{PtrType{TypeCommon: TypeCommon{TypeName: "addr", IsOptional: false}, Type: StructType{TypeCommon: TypeCommon{TypeName: "sockaddr_nfc_llcp", IsOptional: false}, Fields: []Type{ConstType{TypeCommon: TypeCommon{TypeName: "family", IsOptional: false}, TypeSize: 2, Val: uintptr(39)}, IntType{TypeCommon: TypeCommon{TypeName: "devidx", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "target", IsOptional: false}, TypeSize: 4}, FlagsType{TypeCommon: TypeCommon{TypeName: "proto", IsOptional: false}, TypeSize: 4, Vals: []uintptr{1, 2, 3, 4, 5, 6, 7}}, IntType{TypeCommon: TypeCommon{TypeName: "dsap", IsOptional: false}, TypeSize: 1}, IntType{TypeCommon: TypeCommon{TypeName: "ssap", IsOptional: false}, TypeSize: 1}, IntType{TypeCommon: TypeCommon{TypeName: "serv0", IsOptional: false}, TypeSize: 1}, IntType{TypeCommon: TypeCommon{TypeName: "serv1", IsOptional: false}, TypeSize: 1}, IntType{TypeCommon: TypeCommon{TypeName: "serv2", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv3", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv4", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv5", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv6", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv7", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv8", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv9", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv10", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv11", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv12", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv13", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv14", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv15", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv16", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "serv17", IsOptional: false}, TypeSize: 1}, IntType{TypeCommon: TypeCommon{TypeName: "servlen", IsOptional: false}, TypeSize: 8}}}, Dir: DirIn}, LenType{TypeCommon: TypeCommon{TypeName: "addrlen", IsOptional: false}, Buf: "addr", TypeSize: 4}, PtrType{TypeCommon: TypeCommon{TypeName: "vec", IsOptional: false}, Type: ArrayType{TypeCommon: TypeCommon{TypeName: "", IsOptional: false}, Type: StructType{TypeCommon: TypeCommon{TypeName: "iovec_in", IsOptional: false}, Fields: []Type{PtrType{TypeCommon: TypeCommon{TypeName: "addr", IsOptional: false}, Dir: DirIn, Type: BufferType{TypeCommon: TypeCommon{TypeName: "addr", IsOptional: false}, Kind: BufferBlob}}, LenType{TypeCommon: TypeCommon{TypeName: "len", IsOptional: false}, Buf: "addr", TypeSize: 8}}}}, Dir: DirIn}, LenType{TypeCommon: TypeCommon{TypeName: "vlen", IsOptional: false}, Buf: "vec", TypeSize: 8}, PtrType{TypeCommon: TypeCommon{TypeName: "ctrl", IsOptional: false}, Type: StructType{TypeCommon: TypeCommon{TypeName: "cmsghdr", IsOptional: false}, Fields: []Type{IntType{TypeCommon: TypeCommon{TypeName: "len", IsOptional: false}, TypeSize: 8}, IntType{TypeCommon: TypeCommon{TypeName: "level", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "type", IsOptional: false}, TypeSize: 4}}}, Dir: DirIn}, LenType{TypeCommon: TypeCommon{TypeName: "ctrllen", IsOptional: false}, Buf: "ctrl", TypeSize: 8}, FlagsType{TypeCommon: TypeCommon{TypeName: "f", IsOptional: false}, TypeSize: 4, Vals: []uintptr{2048, 4, 64, 128, 32768, 16384, 1}}}}}, Dir: DirIn}, LenType{TypeCommon: TypeCommon{TypeName: "vlen", IsOptional: false}, Buf: "mmsg", TypeSize: 0}, FlagsType{TypeCommon: TypeCommon{TypeName: "f", IsOptional: false}, TypeSize: 0, Vals: []uintptr{2048, 4, 64, 128, 32768, 16384, 1}}}})
+ }()
+ func() {
+ Calls = append(Calls, &Call{ID: 573, Name: "socket$nfc_raw", CallName: "socket", Ret: ResourceType{TypeCommon: TypeCommon{TypeName: "ret", IsOptional: false}, Kind: ResFD, Subkind: FdNfcRaw}, Args: []Type{ConstType{TypeCommon: TypeCommon{TypeName: "domain", IsOptional: false}, TypeSize: 0, Val: uintptr(39)}, FlagsType{TypeCommon: TypeCommon{TypeName: "type", IsOptional: false}, TypeSize: 0, Vals: []uintptr{1, 3}}, ConstType{TypeCommon: TypeCommon{TypeName: "proto", IsOptional: false}, TypeSize: 0, Val: uintptr(0)}}})
+ }()
+ func() {
+ Calls = append(Calls, &Call{ID: 574, Name: "connect$nfc_raw", CallName: "connect", Args: []Type{ResourceType{TypeCommon: TypeCommon{TypeName: "fd", IsOptional: false}, Kind: ResFD, Subkind: FdNfcRaw}, PtrType{TypeCommon: TypeCommon{TypeName: "addr", IsOptional: false}, Type: StructType{TypeCommon: TypeCommon{TypeName: "sockaddr_nfc", IsOptional: false}, Fields: []Type{ConstType{TypeCommon: TypeCommon{TypeName: "family", IsOptional: false}, TypeSize: 2, Val: uintptr(39)}, IntType{TypeCommon: TypeCommon{TypeName: "dev", IsOptional: false}, TypeSize: 4}, IntType{TypeCommon: TypeCommon{TypeName: "targ", IsOptional: false}, TypeSize: 4}, FlagsType{TypeCommon: TypeCommon{TypeName: "proto", IsOptional: false}, TypeSize: 4, Vals: []uintptr{1, 2, 3, 4, 5, 6, 7}}}}, Dir: DirIn}, LenType{TypeCommon: TypeCommon{TypeName: "addrlen", IsOptional: false}, Buf: "addr", TypeSize: 0}}})
+ }()
}
diff --git a/sys/sys.txt b/sys/sys.txt
index 7e84ed34f..189266d0c 100644
--- a/sys/sys.txt
+++ b/sys/sys.txt
@@ -72,6 +72,7 @@ include <linux/fuse.h>
include <linux/perf_event.h>
include <linux/hw_breakpoint.h>
include <linux/if_alg.h>
+include <linux/nfc.h>
include <asm/prctl.h>
@@ -2652,3 +2653,84 @@ define ALG_SET_AEAD_AUTHSIZE 5
#define AF_ALG 38
define SOL_ALG 279
+
+
+
+# PF_KEY support.
+
+# See net/key/af_key.c, requires root.
+# socket$key(domain const[AF_KEY], type const[SOCK_RAW], proto const[PF_KEY_V2]) fd[key]
+
+
+
+
+# PF_NFC support.
+
+socket$nfc_llcp(domain const[AF_NFC], type flags[nfc_llcp_type], proto const[NFC_SOCKPROTO_LLCP]) fd[nfc_llcp]
+bind$nfc_llcp(fd fd[nfc_llcp], addr ptr[in, sockaddr_nfc_llcp], addrlen len[addr])
+connect$nfc_llcp(fd fd[nfc_llcp], addr ptr[in, sockaddr_nfc_llcp], addrlen len[addr])
+accept$nfc_llcp(fd fd[nfc_llcp], peer ptr[out, sockaddr_nfc_llcp, opt], peerlen ptr[inout, len[peer, int32]]) fd[nfc_llcp]
+setsockopt$NFC_LLCP_RW(fd fd[nfc_llcp], level const[SOL_NFC], opt const[NFC_LLCP_RW], arg ptr[in, int32], arglen len[arg])
+setsockopt$NFC_LLCP_MIUX(fd fd[nfc_llcp], level const[SOL_NFC], opt const[NFC_LLCP_MIUX], arg ptr[in, int32], arglen len[arg])
+getsockopt$nfc_llcp(fd fd[nfc_llcp], level const[SOL_NFC], opt flags[nfc_llcp_opts], arg buffer[out], arglen len[arg])
+sendmsg$nfc_llcp(fd fd[nfc_llcp], msg ptr[in, nfc_llcp_send_msghdr], f flags[send_flags])
+sendmmsg$nfc_llcp(fd fd[nfc_llcp], mmsg ptr[in, array[nfc_llcp_send_msghdr]], vlen len[mmsg], f flags[send_flags])
+
+socket$nfc_raw(domain const[AF_NFC], type flags[nfc_raw_type], proto const[NFC_SOCKPROTO_RAW]) fd[nfc_raw]
+connect$nfc_raw(fd fd[nfc_raw], addr ptr[in, sockaddr_nfc], addrlen len[addr])
+
+nfc_llcp_type = SOCK_STREAM, SOCK_DGRAM, SOCK_RAW
+nfc_raw_type = SOCK_STREAM, SOCK_RAW
+nfc_proto = NFC_PROTO_JEWEL, NFC_PROTO_MIFARE, NFC_PROTO_FELICA, NFC_PROTO_ISO14443, NFC_PROTO_NFC_DEP, NFC_PROTO_ISO14443_B, NFC_PROTO_ISO15693
+nfc_llcp_opts = NFC_LLCP_RW, NFC_LLCP_MIUX, NFC_LLCP_REMOTE_MIU, NFC_LLCP_REMOTE_LTO, NFC_LLCP_REMOTE_RW
+
+sockaddr_nfc_llcp {
+ family const[AF_NFC, int16]
+ devidx int32
+ target int32
+ proto flags[nfc_proto, int32]
+ dsap int8
+ ssap int8
+# TODO: need fixed-length arrays
+# char service_name[63]
+ serv0 int8
+ serv1 int8
+ serv2 int32
+ serv3 int32
+ serv4 int32
+ serv5 int32
+ serv6 int32
+ serv7 int32
+ serv8 int32
+ serv9 int32
+ serv10 int32
+ serv11 int32
+ serv12 int32
+ serv13 int32
+ serv14 int32
+ serv15 int32
+ serv16 int32
+ serv17 int8
+ servlen intptr
+}
+
+sockaddr_nfc {
+ family const[AF_NFC, int16]
+ dev int32
+ targ int32
+ proto flags[nfc_proto, int32]
+}
+
+nfc_llcp_send_msghdr {
+ addr ptr[in, sockaddr_nfc_llcp]
+ addrlen len[addr, int32]
+ vec ptr[in, array[iovec_in]]
+ vlen len[vec, intptr]
+ ctrl ptr[in, cmsghdr]
+ ctrllen len[ctrl, intptr]
+ f flags[send_flags, int32]
+}
+
+define SOL_NFC 280
+define NFC_PROTO_ISO15693 7
+
diff --git a/sysgen/sysgen.go b/sysgen/sysgen.go
index 0cd6ae61e..671e27c0b 100644
--- a/sysgen/sysgen.go
+++ b/sysgen/sysgen.go
@@ -355,6 +355,10 @@ func fmtFdKind(s string) string {
return "FdAlg"
case "algconn":
return "FdAlgConn"
+ case "nfc_raw":
+ return "FdNfcRaw"
+ case "nfc_llcp":
+ return "FdNfcLlcp"
default:
failf("bad fd type %v", s)
return ""