mirror of
https://github.com/tailscale/tailscale.git
synced 2025-04-21 06:01:42 +00:00
net/portmapper: make PCP/PMP result codes stringers
Signed-off-by: Josh Bleecher Snyder <josh@tailscale.com>
This commit is contained in:
parent
38d90fa330
commit
40f11c50a1
@ -19,6 +19,10 @@ import (
|
|||||||
// https://www.rfc-editor.org/rfc/pdfrfc/rfc6887.txt.pdf
|
// https://www.rfc-editor.org/rfc/pdfrfc/rfc6887.txt.pdf
|
||||||
// https://tools.ietf.org/html/rfc6887
|
// https://tools.ietf.org/html/rfc6887
|
||||||
|
|
||||||
|
//go:generate go run tailscale.com/cmd/addlicense -year 2021 -file pcpresultcode_string.go go run golang.org/x/tools/cmd/stringer -type=pcpResultCode -trimprefix=pcpCode
|
||||||
|
|
||||||
|
type pcpResultCode uint8
|
||||||
|
|
||||||
// PCP constants
|
// PCP constants
|
||||||
const (
|
const (
|
||||||
pcpVersion = 2
|
pcpVersion = 2
|
||||||
@ -26,14 +30,14 @@ const (
|
|||||||
|
|
||||||
pcpMapLifetimeSec = 7200 // TODO does the RFC recommend anything? This is taken from PMP.
|
pcpMapLifetimeSec = 7200 // TODO does the RFC recommend anything? This is taken from PMP.
|
||||||
|
|
||||||
pcpCodeOK = 0
|
pcpCodeOK pcpResultCode = 0
|
||||||
pcpCodeNotAuthorized = 2
|
pcpCodeNotAuthorized pcpResultCode = 2
|
||||||
// From RFC 6887:
|
// From RFC 6887:
|
||||||
// ADDRESS_MISMATCH: The source IP address of the request packet does
|
// ADDRESS_MISMATCH: The source IP address of the request packet does
|
||||||
// not match the contents of the PCP Client's IP Address field, due
|
// not match the contents of the PCP Client's IP Address field, due
|
||||||
// to an unexpected NAT on the path between the PCP client and the
|
// to an unexpected NAT on the path between the PCP client and the
|
||||||
// PCP-controlled NAT or firewall.
|
// PCP-controlled NAT or firewall.
|
||||||
pcpCodeAddressMismatch = 12
|
pcpCodeAddressMismatch pcpResultCode = 12
|
||||||
|
|
||||||
pcpOpReply = 0x80 // OR'd into request's op code on response
|
pcpOpReply = 0x80 // OR'd into request's op code on response
|
||||||
pcpOpAnnounce = 0
|
pcpOpAnnounce = 0
|
||||||
@ -146,7 +150,7 @@ func pcpAnnounceRequest(myIP netaddr.IP) []byte {
|
|||||||
|
|
||||||
type pcpResponse struct {
|
type pcpResponse struct {
|
||||||
OpCode uint8
|
OpCode uint8
|
||||||
ResultCode uint8
|
ResultCode pcpResultCode
|
||||||
Lifetime uint32
|
Lifetime uint32
|
||||||
Epoch uint32
|
Epoch uint32
|
||||||
}
|
}
|
||||||
@ -156,7 +160,7 @@ func parsePCPResponse(b []byte) (res pcpResponse, ok bool) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
res.OpCode = b[1]
|
res.OpCode = b[1]
|
||||||
res.ResultCode = b[3]
|
res.ResultCode = pcpResultCode(b[3])
|
||||||
res.Lifetime = binary.BigEndian.Uint32(b[4:])
|
res.Lifetime = binary.BigEndian.Uint32(b[4:])
|
||||||
res.Epoch = binary.BigEndian.Uint32(b[8:])
|
res.Epoch = binary.BigEndian.Uint32(b[8:])
|
||||||
return res, true
|
return res, true
|
||||||
|
37
net/portmapper/pcpresultcode_string.go
Normal file
37
net/portmapper/pcpresultcode_string.go
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
// Copyright (c) 2021 Tailscale Inc & AUTHORS All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// Code generated by "stringer -type=pcpResultCode -trimprefix=pcpCode"; DO NOT EDIT.
|
||||||
|
|
||||||
|
package portmapper
|
||||||
|
|
||||||
|
import "strconv"
|
||||||
|
|
||||||
|
func _() {
|
||||||
|
// An "invalid array index" compiler error signifies that the constant values have changed.
|
||||||
|
// Re-run the stringer command to generate them again.
|
||||||
|
var x [1]struct{}
|
||||||
|
_ = x[pcpCodeOK-0]
|
||||||
|
_ = x[pcpCodeNotAuthorized-2]
|
||||||
|
_ = x[pcpCodeAddressMismatch-12]
|
||||||
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
_pcpResultCode_name_0 = "OK"
|
||||||
|
_pcpResultCode_name_1 = "NotAuthorized"
|
||||||
|
_pcpResultCode_name_2 = "AddressMismatch"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (i pcpResultCode) String() string {
|
||||||
|
switch {
|
||||||
|
case i == 0:
|
||||||
|
return _pcpResultCode_name_0
|
||||||
|
case i == 2:
|
||||||
|
return _pcpResultCode_name_1
|
||||||
|
case i == 12:
|
||||||
|
return _pcpResultCode_name_2
|
||||||
|
default:
|
||||||
|
return "pcpResultCode(" + strconv.FormatInt(int64(i), 10) + ")"
|
||||||
|
}
|
||||||
|
}
|
32
net/portmapper/pmpresultcode_string.go
Normal file
32
net/portmapper/pmpresultcode_string.go
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
// Copyright (c) 2021 Tailscale Inc & AUTHORS All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// Code generated by "stringer -type=pmpResultCode -trimprefix=pmpCode"; DO NOT EDIT.
|
||||||
|
|
||||||
|
package portmapper
|
||||||
|
|
||||||
|
import "strconv"
|
||||||
|
|
||||||
|
func _() {
|
||||||
|
// An "invalid array index" compiler error signifies that the constant values have changed.
|
||||||
|
// Re-run the stringer command to generate them again.
|
||||||
|
var x [1]struct{}
|
||||||
|
_ = x[pmpCodeOK-0]
|
||||||
|
_ = x[pmpCodeUnsupportedVersion-1]
|
||||||
|
_ = x[pmpCodeNotAuthorized-2]
|
||||||
|
_ = x[pmpCodeNetworkFailure-3]
|
||||||
|
_ = x[pmpCodeOutOfResources-4]
|
||||||
|
_ = x[pmpCodeUnsupportedOpcode-5]
|
||||||
|
}
|
||||||
|
|
||||||
|
const _pmpResultCode_name = "OKUnsupportedVersionNotAuthorizedNetworkFailureOutOfResourcesUnsupportedOpcode"
|
||||||
|
|
||||||
|
var _pmpResultCode_index = [...]uint8{0, 2, 20, 33, 47, 61, 78}
|
||||||
|
|
||||||
|
func (i pmpResultCode) String() string {
|
||||||
|
if i >= pmpResultCode(len(_pmpResultCode_index)-1) {
|
||||||
|
return "pmpResultCode(" + strconv.FormatInt(int64(i), 10) + ")"
|
||||||
|
}
|
||||||
|
return _pmpResultCode_name[_pmpResultCode_index[i]:_pmpResultCode_index[i+1]]
|
||||||
|
}
|
@ -564,6 +564,8 @@ func (c *Client) createOrGetMapping(ctx context.Context) (external netaddr.IPPor
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go:generate go run tailscale.com/cmd/addlicense -year 2021 -file pmpresultcode_string.go go run golang.org/x/tools/cmd/stringer -type=pmpResultCode -trimprefix=pmpCode
|
||||||
|
|
||||||
type pmpResultCode uint16
|
type pmpResultCode uint16
|
||||||
|
|
||||||
// NAT-PMP constants.
|
// NAT-PMP constants.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user