swn

package
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 30, 2024 License: MIT Imports: 10 Imported by: 0

Documentation

Overview

The swn package implements the SWN client protocol.

Introduction

The Service Witness Protocol is a remote procedure call (RPC)-based protocol that is used to promptly notify a client of resource changes that have occurred on a highly available server.

Overview

In highly available systems, there can be many instances of a service (for instance an SMB3 file service [MS-SMB2]) running on a server or group of servers. These service instances are accessed by clients through network DNS names and associated IP addresses.

The Service Witness Protocol enables a client application (for instance, an SMB3 client) to receive prompt and explicit notifications about the failure or recovery of a network name and associated services, rather than relying on slower detection mechanisms such as time-outs and keep-alives.

The Service Witness Protocol is an independent protocol which is used alongside other protocols, as illustrated by the following figure.

Index

Constants

This section is empty.

Variables

View Source
var (
	// import guard
	GoPackage = "swn"
)

Functions

This section is empty.

Types

type InterfaceInfo

type InterfaceInfo struct {
	// InterfaceGroupName:  The null-terminated string that specifies a name of the interface
	// group.
	InterfaceGroupName []uint16 `idl:"name:InterfaceGroupName" json:"interface_group_name"`
	// Version:  The current version of the Witness Service running on the server.
	Version uint32 `idl:"name:Version" json:"version"`
	// State:  The current state of the interface. This field MUST contain one of the following
	// values:
	//
	//	+--------------------+----------------------------------------+
	//	|                    |                                        |
	//	|       VALUE        |                MEANING                 |
	//	|                    |                                        |
	//	+--------------------+----------------------------------------+
	//	+--------------------+----------------------------------------+
	//	| UNKNOWN 0x0000     | The state of the interface is unknown. |
	//	+--------------------+----------------------------------------+
	//	| AVAILABLE 0x0001   | The interface is available.            |
	//	+--------------------+----------------------------------------+
	//	| UNAVAILABLE 0x00FF | The interface is unavailable.          |
	//	+--------------------+----------------------------------------+
	State uint16 `idl:"name:State" json:"state"`
	// IPV4:  The IPv4 address of the interface, if the IPv4 flag is set in Flags field.
	IPv4 uint32 `idl:"name:IPV4" json:"ipv4"`
	// IPV6:  The IPv6 address of the interface, if the IPv6 flag is set in Flags field.
	IPv6 []uint16 `idl:"name:IPV6" json:"ipv6"`
	// Flags: The Flags field specifies information about the interface. This field MUST
	// be set to combination of zero or more of the following values:
	//
	//	+------------------------------+----------------------------------------------------------------------------------+
	//	|                              |                                                                                  |
	//	|            VALUE             |                                     MEANING                                      |
	//	|                              |                                                                                  |
	//	+------------------------------+----------------------------------------------------------------------------------+
	//	+------------------------------+----------------------------------------------------------------------------------+
	//	| IPv4 0x00000001              | If set, the IPV4 field contains a valid address.                                 |
	//	+------------------------------+----------------------------------------------------------------------------------+
	//	| IPv6 0x00000002              | If set, the IPV6 field contains a valid address.                                 |
	//	+------------------------------+----------------------------------------------------------------------------------+
	//	| INTERFACE_WITNESS 0x00000004 | If set, the interface is available for witness registration. If not set, the     |
	//	|                              | interface MUST NOT be used for witness registration.                             |
	//	+------------------------------+----------------------------------------------------------------------------------+
	Flags uint32 `idl:"name:Flags" json:"flags"`
}

InterfaceInfo structure represents WITNESS_INTERFACE_INFO RPC structure.

The WITNESS_INTERFACE_INFO structure specifies the IP addresses of the interface.

func (*InterfaceInfo) MarshalNDR

func (o *InterfaceInfo) MarshalNDR(ctx context.Context, w ndr.Writer) error

func (*InterfaceInfo) UnmarshalNDR

func (o *InterfaceInfo) UnmarshalNDR(ctx context.Context, w ndr.Reader) error

type InterfaceList

type InterfaceList struct {
	// NumberOfInterfaces:  The number of WITNESS_INTERFACE_INFO structures in InterfaceInfo.
	NumberOfInterfaces uint32 `idl:"name:NumberOfInterfaces" json:"number_of_interfaces"`
	// InterfaceInfo:  Contains an array of WITNESS_INTERFACE_INFO structures, as specified
	// in section 2.2.2.5.
	InterfaceInfo []*InterfaceInfo `idl:"name:InterfaceInfo;size_is:(NumberOfInterfaces);pointer:unique" json:"interface_info"`
}

InterfaceList structure represents WITNESS_INTERFACE_LIST RPC structure.

The WITNESS_INTERFACE_LIST structure specifies the list of interfaces available for witness registration.

func (*InterfaceList) MarshalNDR

func (o *InterfaceList) MarshalNDR(ctx context.Context, w ndr.Writer) error

func (*InterfaceList) UnmarshalNDR

func (o *InterfaceList) UnmarshalNDR(ctx context.Context, w ndr.Reader) error

type ResponseAsyncNotify

type ResponseAsyncNotify struct {
	// MessageType:  Specifies the notification type. This field MUST contain one of the
	// following values.
	//
	//	+-------+----------------------------------------------------------------------------------+
	//	|       |                                                                                  |
	//	| VALUE |                                     MEANING                                      |
	//	|       |                                                                                  |
	//	+-------+----------------------------------------------------------------------------------+
	//	+-------+----------------------------------------------------------------------------------+
	//	|     1 | RESOURCE_CHANGE_NOTIFICATION                                                     |
	//	+-------+----------------------------------------------------------------------------------+
	//	|     2 | CLIENT_MOVE_NOTIFICATION                                                         |
	//	+-------+----------------------------------------------------------------------------------+
	//	|     3 | SHARE_MOVE_NOTIFICATION This value is applicable only for the server             |
	//	|       | implementing version 2.                                                          |
	//	+-------+----------------------------------------------------------------------------------+
	//	|     4 | IP_CHANGE_NOTIFICATION This value is applicable only for the server implementing |
	//	|       | version 2.                                                                       |
	//	+-------+----------------------------------------------------------------------------------+
	MessageType uint32 `idl:"name:MessageType" json:"message_type"`
	// Length:  Specifies the size of the MessageBuffer field, in bytes.
	Length uint32 `idl:"name:Length" json:"length"`
	// NumberOfMessages:  Total number of notifications in the MessageBuffer field.
	NumberOfMessages uint32 `idl:"name:NumberOfMessages" json:"number_of_messages"`
	// MessageBuffer:  Contains an array of notification information structures whose type
	// is determined by the MessageType field.
	MessageBuffer []byte `idl:"name:MessageBuffer;size_is:(Length);pointer:unique" json:"message_buffer"`
}

ResponseAsyncNotify structure represents RESP_ASYNC_NOTIFY RPC structure.

The RESP_ASYNC_NOTIFY structure contains the resource change type.

func (*ResponseAsyncNotify) MarshalNDR

func (o *ResponseAsyncNotify) MarshalNDR(ctx context.Context, w ndr.Writer) error

func (*ResponseAsyncNotify) UnmarshalNDR

func (o *ResponseAsyncNotify) UnmarshalNDR(ctx context.Context, w ndr.Reader) error

type Shared

type Shared dcetypes.ContextHandle

Shared structure represents PCONTEXT_HANDLE_SHARED RPC structure.

func (*Shared) ContextHandle

func (o *Shared) ContextHandle() *dcetypes.ContextHandle

func (*Shared) MarshalNDR

func (o *Shared) MarshalNDR(ctx context.Context, w ndr.Writer) error

func (*Shared) UnmarshalNDR

func (o *Shared) UnmarshalNDR(ctx context.Context, w ndr.Reader) error

Directories

Path Synopsis
witness
v1

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL