📄 igmp_control.c
字号:
/*
$Log:: /OEM Source Code/igmp/igmp_control.c $
*
* 1 4/23/98 9:53p Release Engineer
* Initial release
* IGMP v4.1.0
*/
/************************************************************************/
/* Copyright (C) 1997-1998 RouterWare, Inc. */
/* Unpublished - rights reserved under the Copyright Laws of the */
/* United States. Use, duplication, or disclosure by the */
/* Government is subject to restrictions as set forth in */
/* subparagraph (c)(1)(ii) of the Rights in Technical Data and */
/* Computer Software clause at 252.227-7013. */
/* RouterWare, Inc., 3961 MacArthur Blvd. Suite 212, Newport Beach, CA */
/************************************************************************/
#include <stdlib.h>
#include <stddef.h>
#include "igmp.h"
#include <vnvrmstr.h>
#include "igmp_configuration.h"
/********************************************************************************************/
enum TEST igmp_shutdown (void)
{
UINT port;
if (igmp.enabled == FALSE)
{
IGMP_PROTOCOL_ALARM_TRACE (IGMP_ALARM_TRACE, "IGMP: Shutdown function called again. Router already shutdown.\n");
return (FAIL);
}
for (port = 0; port < igmp.number_of_ports; ++port)
{
free_list (((LINK *)&igmp.port_table[port].active_group_list), (void (*) (void *vptr_data_to_free)) table_free);
initialize_igmp_port (port);
}
if (ip_deregister_upper_layer_protocol (IGMP_PROTOCOL) == FAIL)
{
IGMP_PROTOCOL_ALARM_TRACE (IGMP_ALARM_TRACE, "IGMP: Failed to deregister with IP. Continuing shutdown.\n");
}
if (igmp.stack_id != 0x00000000L)
{
#if defined (__LSL__)
lsl_control (DEREGISTER_PROTOCOL_STACK, (ULONG) NETWORK_LAYER_TYPE, (ULONG) igmp.stack_id);
#endif /* __LSL__ */
igmp.stack_id = 0x00000000L;
}
igmp.enabled = FALSE;
return (PASS);
}
/********************************************************************************************/
enum TEST igmp_control (enum PROTOCOL_CONTROL_OPERATION command, ULONG parameter_0, ULONG parameter_1, ULONG parameter_2)
{
enum TEST return_value;
IGMP_PROTOCOL_ALARM_TRACE (IGMP_ALARM_TRACE, "IGMP: Control function called.\n");
PARAMETER_NOT_USED (parameter_0);
PARAMETER_NOT_USED (parameter_2);
switch (command)
{
case CLOSE_PROTOCOL_STACK:
return_value = igmp_shutdown ();
break;
case GET_NUMBER_OF_PROTOCOL_STACKS_VIRTUAL_PORTS:
*((USHORT *) parameter_1) = (USHORT) igmp.number_of_ports;
break;
default:
/* don't do anything */
return (FAIL);
}
return (PASS);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -