mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
3.1 KiB
124 lines
3.1 KiB
/*++
|
|
|
|
Copyright (c) 1997, Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
nbt.h
|
|
|
|
Abstract:
|
|
|
|
This module contains declarations for the NAT's NetBT support.
|
|
NetBT's datagram service embeds source IP address/port in the datagrams
|
|
that it sends out, hence the need for additional translation.
|
|
|
|
Author:
|
|
|
|
Abolade Gbadegesin (t-abolag) 25-Aug-1997
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#ifndef _NAT_NBT_H_
|
|
#define _NAT_NBT_H_
|
|
|
|
|
|
//
|
|
// Structure: NAT_NBT_MAPPING
|
|
//
|
|
// This structure describes a mapping defined to allow translation of
|
|
// NetBT datagram-service sessions across the NAT.
|
|
//
|
|
// The NetBT datagram-service operates over UDP using port 138 for sending
|
|
// and receiving messages. This means that regardless of what value the NAT
|
|
// places in the NetBT datagram header, replies will be directed to port 138.
|
|
// Therefore, in order to translate NetBT datagrams, the NAT must incorporate
|
|
// additional information.
|
|
//
|
|
// The NAT registers a handler for outbound traffic destined for the NetBT
|
|
// datagram-service port, as well as implementing an IP-layer translator
|
|
// for inbound traffic destined for the NetBT datagram-service port.
|
|
// Each outgoing message is then examined, and a mapping is created using
|
|
// (a) the source (private) IP address in the datagram header
|
|
// (b) the public IP address chosen by the NAT
|
|
// (c) the source name in the datagram header
|
|
// The source IP address is then replaced with the public IP address,
|
|
// and the source port is replaced with the NetBT datagram-service port.
|
|
//
|
|
// Each incoming message is in turn examined by the IP-layer translator,
|
|
// and a lookup is done using
|
|
// (a) the receiving (public) IP address
|
|
// (b) the destination name in the datagram header.
|
|
// after which the packet's destination IP address is translated.
|
|
//
|
|
// A list of mappings is maintained on each interface, ordered by
|
|
// by public IP address and source name for outbound searching.
|
|
//
|
|
|
|
|
|
typedef struct _NAT_NBT_MAPPING {
|
|
LIST_ENTRY Link;
|
|
ULONG PrivateAddress;
|
|
ULONG PublicAddress;
|
|
UCHAR SourceName[NBT_NAME_LENGTH];
|
|
LONG64 LastAccessTime;
|
|
} NAT_NBT_MAPPING, *PNAT_NBT_MAPPING;
|
|
|
|
|
|
//
|
|
// NBT mapping allocation macros
|
|
//
|
|
|
|
#define ALLOCATE_NBT_BLOCK() \
|
|
ExAllocateFromNPagedLookasideList(&NbtLookasideList)
|
|
|
|
#define FREE_NBT_BLOCK(Block) \
|
|
ExFreeToNPagedLookasideList(&NbtLookasideList,(Block))
|
|
|
|
|
|
|
|
//
|
|
// FUNCTION DECLARATIONS
|
|
//
|
|
|
|
NTSTATUS
|
|
NatCreateNbtMapping(
|
|
PNAT_INTERFACE Interfacep,
|
|
ULONG PrivateAddress,
|
|
ULONG PublicAddress,
|
|
UCHAR SourceName[],
|
|
PLIST_ENTRY InboundInsertionPoint,
|
|
PNAT_NBT_MAPPING* MappingCreated
|
|
);
|
|
|
|
PNAT_NBT_MAPPING
|
|
NatLookupInboundNbtMapping(
|
|
PNAT_INTERFACE Interfacep,
|
|
ULONG PublicAddress,
|
|
UCHAR SourceName[],
|
|
PLIST_ENTRY* InboundInsertionPoint
|
|
);
|
|
|
|
NTSTATUS
|
|
NatInitializeEditorNbt(
|
|
VOID
|
|
);
|
|
|
|
NTSTATUS
|
|
NatOutboundDataHandlerNbt(
|
|
IN PVOID InterfaceHandle,
|
|
IN PVOID SessionHandle,
|
|
IN PVOID DataHandle,
|
|
IN PVOID EditorContext,
|
|
IN PVOID EditorSessionContext,
|
|
IN PVOID RecvBuffer,
|
|
IN ULONG DataOffset
|
|
);
|
|
|
|
XLATE_IP_ROUTINE(NatTranslateNbt)
|
|
|
|
extern IP_NAT_REGISTER_EDITOR NbtRegisterEditor;
|
|
|
|
|
|
#endif // _NAT_NBT_H_
|