Documentation ¶
Index ¶
- Constants
- Variables
- func ErrorHandler(err error, c echo.Context)
- func GeneratedSessionKeyID(id []byte) bool
- func JoinServerFQDN(eui types.EUI64, domain string) string
- type AppSKeyAns
- type AppSKeyReq
- type ApplicationServer
- type AsJsMessageHeader
- type Buffer
- type Client
- type Component
- type DevAddr
- type EUI64
- type ErrorMessage
- type ForwardingNetworkServer
- type HomeNSAns
- type HomeNSReq
- type HomeNetworkServer
- type JoinAns
- type JoinReq
- type JoinServer
- type JoinServerProtocol
- type JsAsMessageHeader
- type JsNsMessageHeader
- type KeyEnvelope
- type MACVersion
- type MessageHeader
- type MessageType
- type NetID
- type NsJsMessageHeader
- type RawMessageHeader
- type Registerer
- type Result
- type ResultCode
- type Server
- func (s *Server) RegisterAS(as ApplicationServer)
- func (s *Server) RegisterFNS(fNS ForwardingNetworkServer)
- func (s *Server) RegisterHNS(hNS HomeNetworkServer)
- func (s *Server) RegisterJS(js JoinServer)
- func (s *Server) RegisterSNS(sNS ServingNetworkServer)
- func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request)
- type ServingNetworkServer
Constants ¶
const ( // LoRaAllianceJoinEUIDomain is the LoRa Alliance domain used for JoinEUI resolution. LoRaAllianceJoinEUIDomain = "joineuis." + loRaAllianceDomain // LoRaAllianceNetIDDomain is the LoRa Alliance domain used for NetID resolution. LoRaAllianceNetIDDomain = "netids." + loRaAllianceDomain )
const InteropClientConfigurationName = "config.yml"
InteropClientConfigurationName represents the filename of interop client configuration.
const SenderClientCAsConfigurationName = "config.yml"
SenderClientCAsConfigurationName represents the filename of sender client CAs configuration.
Variables ¶
var ( ErrNoAction = defineError("no_action", ResultNoAction, "no action") ErrMIC = defineError("mic", ResultMICFailed, "MIC failed") ErrFrameReplayed = defineError("frame_replayed", ResultFrameReplayed, "frame replayed") ErrJoinReq = defineError("join_req", ResultJoinReqFailed, "join-request failed") ErrNoRoamingAgreement = defineError("no_roaming_agreement", ResultNoRoamingAgreement, "no roaming agreement") ErrDeviceRoaming = defineError("device_roaming", ResultDevRoamingDisallowed, "device roaming disallowed") ErrRoamingActivation = defineError("roaming_activation", ResultRoamingActDisallowed, "roaming activation disallowed") ErrActivation = defineError("activation", ResultActivationDisallowed, "activation disallowed") ErrUnknownDevEUI = defineError("unknown_dev_eui", ResultUnknownDevEUI, "unknown DevEUI") ErrUnknownDevAddr = defineError("unknown_dev_addr", ResultUnknownDevAddr, "unknown DevAddr") ErrUnknownSender = defineError("unknown_sender", ResultUnknownSender, "unknown sender") ErrUnknownReceiver = defineError("unknown_receiver", ResultUnknownReceiver, "unknown receiver") ErrDeferred = defineError("deferred", ResultDeferred, "deferred") ErrTransmitFailed = defineError("transmit_failed", ResultXmitFailed, "transmit failed") ErrFPort = defineError("f_port", ResultInvalidFPort, "invalid FPort") ErrProtocolVersion = defineError("protocol_version", ResultInvalidProtocolVersion, "invalid protocol version") ErrStaleDeviceProfile = defineError("stale_device_profile", ResultStaleDeviceProfile, "stale device profile") ErrMalformedMessage = defineError("malformed_message", ResultMalformedMessage, "malformed message") ErrFrameSize = defineError("frame_size", ResultFrameSizeError, "frame size error") )
Functions ¶
func ErrorHandler ¶
ErrorHandler is an echo.HTTPErrorHandler.
func GeneratedSessionKeyID ¶
GeneratedSessionKeyID returns whether the session key ID is generated locally and not by the Join Server.
Types ¶
type AppSKeyAns ¶
type AppSKeyAns struct { JsAsMessageHeader Result Result DevEUI EUI64 AppSKey KeyEnvelope SessionKeyID Buffer }
AppSKeyAns is an answer to an AppSKeyReq message.
type AppSKeyReq ¶
type AppSKeyReq struct { AsJsMessageHeader DevEUI EUI64 SessionKeyID Buffer }
AppSKeyReq is a AppSKey request message.
type ApplicationServer ¶
type ApplicationServer interface { }
ApplicationServer represents an Application Server.
type AsJsMessageHeader ¶
type AsJsMessageHeader struct { MessageHeader SenderID string // ReceiverID is a JoinEUI. ReceiverID EUI64 }
AsJsMessageHeader contains the message header for AS to JS messages.
func (AsJsMessageHeader) AnswerHeader ¶
func (h AsJsMessageHeader) AnswerHeader() (JsAsMessageHeader, error)
AnswerHeader returns the header of the answer message.
type Buffer ¶
type Buffer []byte
Buffer contains binary data.
func (Buffer) MarshalJSON ¶
MarshalJSON marshals the binary data to a hexadecimal string.
func (*Buffer) UnmarshalJSON ¶
UnmarshalJSON unmarshals a hexadecimal string to binary data.
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
func (Client) GetAppSKey ¶
func (cl Client) GetAppSKey(ctx context.Context, asID string, req *ttnpb.SessionKeyRequest) (*ttnpb.AppSKeyResponse, error)
GetAppSKey performs AppSKey request to Join Server associated with req.JoinEUI.
func (Client) HandleJoinRequest ¶
func (cl Client) HandleJoinRequest(ctx context.Context, netID types.NetID, req *ttnpb.JoinRequest) (*ttnpb.JoinResponse, error)
HandleJoinRequest performs Join request to Join Server associated with req.JoinEUI.
type DevAddr ¶
DevAddr is a LoRaWAN DevAddr.
func (DevAddr) MarshalJSON ¶
MarshalJSON marshals the DevAddr to JSON.
func (*DevAddr) UnmarshalJSON ¶
UnmarshalJSON unmarshals the DevAddr from JSON.
type EUI64 ¶
EUI64 is an 64-bit EUI, e.g. a DevEUI or JoinEUI.
func (EUI64) MarshalJSON ¶
MarshalJSON marshals the EUI64 to JSON.
func (*EUI64) UnmarshalJSON ¶
UnmarshalJSON unmarshals the EUI64 from JSON.
type ErrorMessage ¶
type ErrorMessage struct { RawMessageHeader Result Result }
ErrorMessage is a message with raw header and a result field.
type ForwardingNetworkServer ¶
type ForwardingNetworkServer interface { }
ForwardingNetworkServer represents a Forwarding Network Server.
type HomeNSAns ¶
type HomeNSAns struct { JsNsMessageHeader Result Result HNSID NetID HNetID NetID }
HomeNSAns is an answer to a HomeNSReq message.
type HomeNSReq ¶
type HomeNSReq struct { NsJsMessageHeader DevEUI EUI64 }
HomeNSReq is a NetID request message.
type HomeNetworkServer ¶
type HomeNetworkServer interface { }
HomeNetworkServer represents a Home Network Server.
type JoinAns ¶
type JoinAns struct { JsNsMessageHeader PHYPayload Buffer Result Result Lifetime uint32 SNwkSIntKey *KeyEnvelope `json:",omitempty"` FNwkSIntKey *KeyEnvelope `json:",omitempty"` NwkSEncKey *KeyEnvelope `json:",omitempty"` NwkSKey *KeyEnvelope `json:",omitempty"` AppSKey *KeyEnvelope `json:",omitempty"` SessionKeyID Buffer `json:",omitempty"` }
JoinAns is an answer to a JoinReq message.
type JoinReq ¶
type JoinReq struct { NsJsMessageHeader MACVersion MACVersion PHYPayload Buffer DevEUI EUI64 DevAddr DevAddr DLSettings Buffer RxDelay ttnpb.RxDelay CFList Buffer }
JoinReq is a join-request message.
type JoinServer ¶
type JoinServer interface { JoinRequest(context.Context, *JoinReq) (*JoinAns, error) AppSKeyRequest(context.Context, *AppSKeyReq) (*AppSKeyAns, error) HomeNSRequest(context.Context, *HomeNSReq) (*HomeNSAns, error) }
JoinServer represents a Join Server.
type JoinServerProtocol ¶
type JoinServerProtocol uint8
JoinServerProtocol represents the protocol used for connection to Join Server by interop client.
const ( // LoRaWANJoinServerProtocol1_0 represents Join Server protocol defined by LoRaWAN Backend Interfaces 1.0 specification. LoRaWANJoinServerProtocol1_0 JoinServerProtocol = iota // LoRaWANJoinServerProtocol1_1 represents Join Server protocol defined by LoRaWAN Backend Interfaces 1.1 specification. LoRaWANJoinServerProtocol1_1 )
func (JoinServerProtocol) BackendInterfacesVersion ¶
func (p JoinServerProtocol) BackendInterfacesVersion() string
BackendInterfacesVersion returns the version of LoRaWAN Backend Interfaces specification version the protocol p is compliant with. BackendInterfacesVersion panics if p is not compliant with LoRaWAN Backend Interfaces specification.
func (*JoinServerProtocol) UnmarshalYAML ¶
func (p *JoinServerProtocol) UnmarshalYAML(unmarshal func(interface{}) error) error
UnmarshalYAML implements yaml.Unmarshaler.
type JsAsMessageHeader ¶
type JsAsMessageHeader struct { MessageHeader // SenderID is a JoinEUI. SenderID EUI64 ReceiverID string }
JsAsMessageHeader contains the message header for JS to AS messages.
type JsNsMessageHeader ¶
type JsNsMessageHeader struct { MessageHeader // SenderID is a JoinEUI. SenderID EUI64 ReceiverID NetID ReceiverNSID NetID }
JsNsMessageHeader contains the message header for JS to NS messages.
type KeyEnvelope ¶
type KeyEnvelope ttnpb.KeyEnvelope
KeyEnvelope contains a (encrypted) key.
func (KeyEnvelope) MarshalJSON ¶
func (k KeyEnvelope) MarshalJSON() ([]byte, error)
MarshalJSON marshals the key envelope to JSON.
func (*KeyEnvelope) UnmarshalJSON ¶
func (k *KeyEnvelope) UnmarshalJSON(data []byte) error
UnmarshalJSON unmarshals the key envelope from JSON.
type MACVersion ¶
type MACVersion ttnpb.MACVersion
MACVersion is the MAC version.
func (MACVersion) MarshalJSON ¶
func (v MACVersion) MarshalJSON() ([]byte, error)
MarshalJSON marshals the version to text format.
func (*MACVersion) UnmarshalJSON ¶
func (v *MACVersion) UnmarshalJSON(data []byte) error
UnmarshalJSON unmarshals a version in text format.
type MessageHeader ¶
type MessageHeader struct { ProtocolVersion string TransactionID uint32 MessageType MessageType SenderToken Buffer `json:",omitempty"` ReceiverToken Buffer `json:",omitempty"` }
MessageHeader contains the message header.
func (MessageHeader) AnswerHeader ¶
func (h MessageHeader) AnswerHeader() (MessageHeader, error)
AnswerHeader returns the header of the answer message.
type MessageType ¶
type MessageType string
MessageType is the message type.
const ( MessageTypeJoinReq MessageType = "JoinReq" MessageTypeJoinAns MessageType = "JoinAns" MessageTypeRejoinReq MessageType = "RejoinReq" MessageTypeRejoinAns MessageType = "RejoinAns" MessageTypeAppSKeyReq MessageType = "AppSKeyReq" MessageTypeAppSKeyAns MessageType = "AppSKeyAns" MessageTypePRStartReq MessageType = "PRStartReq" MessageTypePRStartAns MessageType = "PRStartAns" MessageTypePRStartNotif MessageType = "PRStartNotif" MessageTypePRStopReq MessageType = "PRStopReq" MessageTypePRStopAns MessageType = "PRStopAns" MessageTypeHRStartReq MessageType = "HRStartReq" MessageTypeHRStartAns MessageType = "HRStartAns" MessageTypeHRStopReq MessageType = "HRStopReq" MessageTypeHRStopAns MessageType = "HRStopAns" MessageTypeHomeNSReq MessageType = "HomeNSReq" MessageTypeHomeNSAns MessageType = "HomeNSAns" MessageTypeProfileReq MessageType = "ProfileReq" MessageTypeProfileAns MessageType = "ProfileAns" MessageTypeXmitDataReq MessageType = "XmitDataReq" MessageTypeXmitDataAns MessageType = "XmitDataAns" MessageTypeXmitLocReq MessageType = "XmitLocReq" MessageTypeXmitLocAns MessageType = "XmitLocAns" MessageTypeErrorNotif MessageType = "ErrorNotif" )
type NetID ¶
NetID is a LoRaWAN NetID.
func (NetID) MarshalJSON ¶
MarshalJSON marshals the NetID to JSON.
func (*NetID) UnmarshalJSON ¶
UnmarshalJSON unmarshals the NetID from JSON.
type NsJsMessageHeader ¶
type NsJsMessageHeader struct { MessageHeader SenderID NetID // ReceiverID is a JoinEUI. ReceiverID EUI64 SenderNSID NetID }
NsJsMessageHeader contains the message header for NS to JS messages.
func (NsJsMessageHeader) AnswerHeader ¶
func (h NsJsMessageHeader) AnswerHeader() (JsNsMessageHeader, error)
AnswerHeader returns the header of the answer message.
type RawMessageHeader ¶
type RawMessageHeader struct { MessageHeader SenderID, ReceiverID string }
RawMessageHeader contains a message header with generic sender and receiver IDs.
func (RawMessageHeader) AnswerHeader ¶
func (h RawMessageHeader) AnswerHeader() (RawMessageHeader, error)
AnswerHeader returns the header of the answer message.
type Registerer ¶
type Registerer interface {
RegisterInterop(s *Server)
}
Registerer allows components to register their interop services to the web server.
type Result ¶
type Result struct { ResultCode ResultCode Description string `json:",omitempty"` }
Result contains the result of an operation.
type ResultCode ¶
type ResultCode string
ResultCode is the result of an answer message.
const ( ResultSuccess ResultCode = "Success" ResultNoAction ResultCode = "NoAction" ResultMICFailed ResultCode = "MICFailed" ResultFrameReplayed ResultCode = "FrameReplayed" ResultJoinReqFailed ResultCode = "JoinReqFailed" ResultNoRoamingAgreement ResultCode = "NoRoamingAgreement" ResultDevRoamingDisallowed ResultCode = "DevRoamingDisallowed" ResultRoamingActDisallowed ResultCode = "RoamingActDisallowed" ResultActivationDisallowed ResultCode = "ActivationDisallowed" ResultUnknownDevEUI ResultCode = "UnknownDevEUI" ResultUnknownDevAddr ResultCode = "UnknownDevAddr" ResultUnknownSender ResultCode = "UnknownSender" ResultUnknownReceiver ResultCode = "UnknownReceiver" ResultDeferred ResultCode = "Deferred" ResultXmitFailed ResultCode = "XmitFailed" ResultInvalidFPort ResultCode = "InvalidFPort" ResultInvalidProtocolVersion ResultCode = "InvalidProtocolVersion" ResultStaleDeviceProfile ResultCode = "StaleDeviceProfile" ResultMalformedMessage ResultCode = "MalformedMessage" ResultFrameSizeError ResultCode = "FrameSizeError" ResultOther ResultCode = "Other" )
type Server ¶
type Server struct { SenderClientCAs map[string][]*x509.Certificate // contains filtered or unexported fields }
Server is the server.
func NewServer ¶
func NewServer(c Component, contextFiller fillcontext.Filler, conf config.InteropServer) (*Server, error)
NewServer builds a new server.
func (*Server) RegisterAS ¶
func (s *Server) RegisterAS(as ApplicationServer)
RegisterAS registers the Application Server for JS-AS messages.
func (*Server) RegisterFNS ¶
func (s *Server) RegisterFNS(fNS ForwardingNetworkServer)
RegisterFNS registers the Forwarding Network Server for sNS-fNS and JS-vNS messages.
func (*Server) RegisterHNS ¶
func (s *Server) RegisterHNS(hNS HomeNetworkServer)
RegisterHNS registers the Home Network Server for AS-hNS, JS-hNS and sNS-hNS messages.
func (*Server) RegisterJS ¶
func (s *Server) RegisterJS(js JoinServer)
RegisterJS registers the Join Server for AS-JS, hNS-JS and vNS-JS messages.
func (*Server) RegisterSNS ¶
func (s *Server) RegisterSNS(sNS ServingNetworkServer)
RegisterSNS registers the Serving Network Server for hNS-sNS, fNS-sNS and JS-vNS messages.
type ServingNetworkServer ¶
type ServingNetworkServer interface { }
ServingNetworkServer represents a Serving Network Server.