Commit 12104807 authored by Mikio Hara's avatar Mikio Hara Committed by Brad Fitzpatrick

syscall: add IPv6 scope zone ID support

R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/4515124
parent 8c6dc5fe
...@@ -191,9 +191,10 @@ func (sa *SockaddrInet4) sockaddr() (uintptr, _Socklen, int) { ...@@ -191,9 +191,10 @@ func (sa *SockaddrInet4) sockaddr() (uintptr, _Socklen, int) {
} }
type SockaddrInet6 struct { type SockaddrInet6 struct {
Port int Port int
Addr [16]byte ZoneId uint32
raw RawSockaddrInet6 Addr [16]byte
raw RawSockaddrInet6
} }
func (sa *SockaddrInet6) sockaddr() (uintptr, _Socklen, int) { func (sa *SockaddrInet6) sockaddr() (uintptr, _Socklen, int) {
...@@ -205,6 +206,7 @@ func (sa *SockaddrInet6) sockaddr() (uintptr, _Socklen, int) { ...@@ -205,6 +206,7 @@ func (sa *SockaddrInet6) sockaddr() (uintptr, _Socklen, int) {
p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
p[0] = byte(sa.Port >> 8) p[0] = byte(sa.Port >> 8)
p[1] = byte(sa.Port) p[1] = byte(sa.Port)
sa.raw.Scope_id = sa.ZoneId
for i := 0; i < len(sa.Addr); i++ { for i := 0; i < len(sa.Addr); i++ {
sa.raw.Addr[i] = sa.Addr[i] sa.raw.Addr[i] = sa.Addr[i]
} }
...@@ -297,6 +299,7 @@ func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, int) { ...@@ -297,6 +299,7 @@ func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, int) {
sa := new(SockaddrInet6) sa := new(SockaddrInet6)
p := (*[2]byte)(unsafe.Pointer(&pp.Port)) p := (*[2]byte)(unsafe.Pointer(&pp.Port))
sa.Port = int(p[0])<<8 + int(p[1]) sa.Port = int(p[0])<<8 + int(p[1])
sa.ZoneId = pp.Scope_id
for i := 0; i < len(sa.Addr); i++ { for i := 0; i < len(sa.Addr); i++ {
sa.Addr[i] = pp.Addr[i] sa.Addr[i] = pp.Addr[i]
} }
......
...@@ -219,9 +219,10 @@ func (sa *SockaddrInet4) sockaddr() (uintptr, _Socklen, int) { ...@@ -219,9 +219,10 @@ func (sa *SockaddrInet4) sockaddr() (uintptr, _Socklen, int) {
} }
type SockaddrInet6 struct { type SockaddrInet6 struct {
Port int Port int
Addr [16]byte ZoneId uint32
raw RawSockaddrInet6 Addr [16]byte
raw RawSockaddrInet6
} }
func (sa *SockaddrInet6) sockaddr() (uintptr, _Socklen, int) { func (sa *SockaddrInet6) sockaddr() (uintptr, _Socklen, int) {
...@@ -232,6 +233,7 @@ func (sa *SockaddrInet6) sockaddr() (uintptr, _Socklen, int) { ...@@ -232,6 +233,7 @@ func (sa *SockaddrInet6) sockaddr() (uintptr, _Socklen, int) {
p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))
p[0] = byte(sa.Port >> 8) p[0] = byte(sa.Port >> 8)
p[1] = byte(sa.Port) p[1] = byte(sa.Port)
sa.raw.Scope_id = sa.ZoneId
for i := 0; i < len(sa.Addr); i++ { for i := 0; i < len(sa.Addr); i++ {
sa.raw.Addr[i] = sa.Addr[i] sa.raw.Addr[i] = sa.Addr[i]
} }
...@@ -370,6 +372,7 @@ func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, int) { ...@@ -370,6 +372,7 @@ func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, int) {
sa := new(SockaddrInet6) sa := new(SockaddrInet6)
p := (*[2]byte)(unsafe.Pointer(&pp.Port)) p := (*[2]byte)(unsafe.Pointer(&pp.Port))
sa.Port = int(p[0])<<8 + int(p[1]) sa.Port = int(p[0])<<8 + int(p[1])
sa.ZoneId = pp.Scope_id
for i := 0; i < len(sa.Addr); i++ { for i := 0; i < len(sa.Addr); i++ {
sa.Addr[i] = pp.Addr[i] sa.Addr[i] = pp.Addr[i]
} }
......
...@@ -536,8 +536,9 @@ func (sa *SockaddrInet4) sockaddr() (uintptr, int32, int) { ...@@ -536,8 +536,9 @@ func (sa *SockaddrInet4) sockaddr() (uintptr, int32, int) {
} }
type SockaddrInet6 struct { type SockaddrInet6 struct {
Port int Port int
Addr [16]byte ZoneId uint32
Addr [16]byte
} }
func (sa *SockaddrInet6) sockaddr() (uintptr, int32, int) { func (sa *SockaddrInet6) sockaddr() (uintptr, int32, int) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment