160 lines
2.9 KiB
C
160 lines
2.9 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1995 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
routing\ip\rtrmgr\compare.c
|
||
|
|
||
|
Abstract:
|
||
|
File contains the following functions
|
||
|
PortCmp
|
||
|
Cmp
|
||
|
InetCmp
|
||
|
UdpCmp
|
||
|
TcpCmp
|
||
|
IpNetCmp
|
||
|
|
||
|
All these functions behave like strcmp. They return >0 if first argument is greater
|
||
|
than the second, <0 if the second is greater than the first and 0 if they are equal
|
||
|
|
||
|
These functions should be revised to make them more effecient
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
Amritansh Raghav 6/8/95 Created
|
||
|
Amritansh Raghav 10/18/95 The functions now return >0,0,<0 instead of +1,0,-1
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include "allinc.h"
|
||
|
#include "winsock2.h"
|
||
|
|
||
|
LONG
|
||
|
UdpCmp(
|
||
|
DWORD dwAddr1,
|
||
|
DWORD dwPort1,
|
||
|
DWORD dwAddr2,
|
||
|
DWORD dwPort2
|
||
|
)
|
||
|
{
|
||
|
LONG lResult;
|
||
|
|
||
|
if(InetCmp(dwAddr1,dwAddr2,lResult))
|
||
|
{
|
||
|
return lResult;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return PortCmp(dwPort1,dwPort2,lResult);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
LONG
|
||
|
TcpCmp(
|
||
|
DWORD dwLocalAddr1,
|
||
|
DWORD dwLocalPort1,
|
||
|
DWORD dwRemAddr1,
|
||
|
DWORD dwRemPort1,
|
||
|
DWORD dwLocalAddr2,
|
||
|
DWORD dwLocalPort2,
|
||
|
DWORD dwRemAddr2,
|
||
|
DWORD dwRemPort2
|
||
|
)
|
||
|
{
|
||
|
LONG lResult;
|
||
|
|
||
|
if(InetCmp(dwLocalAddr1,dwLocalAddr2,lResult) isnot 0)
|
||
|
{
|
||
|
return lResult;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if(PortCmp(dwLocalPort1,dwLocalPort2,lResult) isnot 0)
|
||
|
{
|
||
|
return lResult;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if(InetCmp(dwRemAddr1,dwRemAddr2,lResult) isnot 0)
|
||
|
{
|
||
|
return lResult;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return PortCmp(dwRemPort1,dwRemPort2,lResult);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
LONG
|
||
|
IpNetCmp(
|
||
|
DWORD dwIfIndex1,
|
||
|
DWORD dwAddr1,
|
||
|
DWORD dwIfIndex2,
|
||
|
DWORD dwAddr2
|
||
|
)
|
||
|
{
|
||
|
LONG lResult;
|
||
|
|
||
|
//
|
||
|
// Index is a simple DWORD, not a port
|
||
|
//
|
||
|
|
||
|
if(dwIfIndex1 != dwIfIndex2)
|
||
|
{
|
||
|
if(dwIfIndex1 < dwIfIndex2)
|
||
|
{
|
||
|
return -1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return 1;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return InetCmp(dwAddr1,dwAddr2,lResult);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
LONG
|
||
|
IpForwardCmp(
|
||
|
DWORD dwIpDest1,
|
||
|
DWORD dwProto1,
|
||
|
DWORD dwPolicy1,
|
||
|
DWORD dwIpNextHop1,
|
||
|
DWORD dwIpDest2,
|
||
|
DWORD dwProto2,
|
||
|
DWORD dwPolicy2,
|
||
|
DWORD dwIpNextHop2
|
||
|
)
|
||
|
{
|
||
|
LONG lResult;
|
||
|
|
||
|
if(InetCmp(dwIpDest1,dwIpDest2,lResult) isnot 0)
|
||
|
{
|
||
|
return lResult;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if(Cmp(dwProto1,dwProto2,lResult) isnot 0)
|
||
|
{
|
||
|
return lResult;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if(Cmp(dwPolicy1,dwPolicy2,lResult) isnot 0)
|
||
|
{
|
||
|
return lResult;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return InetCmp(dwIpNextHop1,dwIpNextHop2,lResult);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|