windows-nt/Source/XPSP1/NT/net/tcpip/tpipv6/tcpip6/inc/select.h
2020-09-26 16:20:57 +08:00

71 lines
1.8 KiB
C

// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil -*- (for GNU Emacs)
//
// Copyright (c) 2000 Microsoft Corporation
//
// This file is part of the Microsoft Research IPv6 Network Protocol Stack.
// You should have received a copy of the Microsoft End-User License Agreement
// for this software along with this release; see the file "license.txt".
// If not, please see http://www.research.microsoft.com/msripv6/license.htm,
// or write to Microsoft Research, One Microsoft Way, Redmond, WA 98052-6399.
//
// Abstract:
//
// Declarations and definitions for source address selection
// and destination address ordering.
//
#ifndef SELECT_INCLUDED
#define SELECT_INCLUDED 1
#include <tdi.h>
extern void InitSelect(void);
extern void UnloadSelect(void);
typedef struct PrefixPolicyEntry {
struct PrefixPolicyEntry *Next;
IPv6Addr Prefix;
uint PrefixLength;
uint Precedence;
uint SrcLabel;
uint DstLabel;
} PrefixPolicyEntry;
//
// SelectLock protects PrefixPolicyTable.
//
extern KSPIN_LOCK SelectLock;
extern PrefixPolicyEntry *PrefixPolicyTable;
extern void
PrefixPolicyReset(void);
extern void
PrefixPolicyUpdate(const IPv6Addr *PolicyPrefix, uint PrefixLength,
uint Precedence, uint SrcLabel, uint DstLabel);
extern void
PrefixPolicyDelete(const IPv6Addr *PolicyPrefix, uint PrefixLength);
extern void
PrefixPolicyLookup(const IPv6Addr *Addr,
uint *Precedence, uint *SrcLabel, uint *DstLabel);
extern NetTableEntry *
FindBestSourceAddress(Interface *IF, const IPv6Addr *Dest);
extern void
ProcessSiteLocalAddresses(TDI_ADDRESS_IP6 *Addrs,
uint *Key,
uint *pNumAddrs);
extern void
SortDestAddresses(const TDI_ADDRESS_IP6 *Addrs,
uint *Key,
uint NumAddrs);
#endif // SELECT_INCLUDED