// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil -*- (for GNU Emacs)
//
// Copyright (c) 1985-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:
//
// User Datagram Protocol initialization code.
//


#include "oscfg.h"
#include "ndis.h"
#include "ip6imp.h"
#include "ip6def.h"
#include "tdi.h"
#include "tdistat.h"
#include "tdint.h"
#include "tdistat.h"
#include "queue.h"
#include "transprt.h"
#include "addr.h"
#include "udp.h"
#include "info.h"

//* UDPInit - Initialize the User Datagram Protocol.
//
//  Initialize UDP and raw IP.
//
int
UDPInit(void)
{
    //
    // First initialize the underlying datagram processing code
    // that both UDP and raw IP depend upon.
    //
    if (!InitDG())
        return FALSE;

    //
    // Clear UDP statistics.
    //
    RtlZeroMemory(&UStats, sizeof(UDPStats));

    //
    // Register our UDP protocol handler with the IP layer.
    //
    IPv6RegisterULProtocol(IP_PROTOCOL_UDP, UDPReceive, UDPControlReceive);

    return TRUE;
}

//* UDPUnload
//
//  Cleanup and prepare UDP and raw IP for stack unload.
//
void
UDPUnload(void)
{
    DGUnload();
}