williamr@2: /**
williamr@2: * Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
williamr@2: * All rights reserved.
williamr@2: * This component and the accompanying materials are made available
williamr@2: * under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
williamr@2: * which accompanies this distribution, and is available
williamr@2: * at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
williamr@2: *
williamr@2: * Initial Contributors:
williamr@2: * Nokia Corporation - initial contribution.
williamr@2: *
williamr@2: * Contributors:
williamr@2: *
williamr@2: * Description:
williamr@2: *
williamr@2: */
williamr@2: 
williamr@2: 
williamr@2: 
williamr@2: 
williamr@2: 
williamr@2: /**
williamr@2:  @file IN_IFACE.H
williamr@2: */
williamr@2: 
williamr@2: #if !defined(__IN_IFACE_H__)
williamr@2: #define __IN_IFACE_H__
williamr@2: 
williamr@2: #if !defined(__IN_SOCK_H__)
williamr@2: #include <in_sock.h>
williamr@2: #endif
williamr@2: 
williamr@2: #if !defined(__NIFVAR_H__)
williamr@2: #include <nifvar.h>
williamr@2: #endif
williamr@2: 
williamr@2: // Feature Flags
williamr@2: 
williamr@2: /**
williamr@2: Is a loopback interface
williamr@2: @internalAll
williamr@2: */
williamr@2: const TUint KIfIsLoopback			= 0x00000001;
williamr@2: 
williamr@2: /**
williamr@2: Is single point to point
williamr@2: @internalAll
williamr@2: */
williamr@2: const TUint KIfIsPointToPoint		= 0x00000002;
williamr@2: 
williamr@2: /**
williamr@2: Supports broadcasting
williamr@2: @internalAll
williamr@2: */
williamr@2: const TUint KIfCanBroadcast			= 0x00000004;
williamr@2: 
williamr@2: /**
williamr@2: Supports multicasting
williamr@2: @internalAll
williamr@2: */	
williamr@2: const TUint KIfCanMulticast			= 0x00000008;
williamr@2: 
williamr@2: /**
williamr@2: Can have its MTU	set
williamr@2: @internalAll
williamr@2: */	
williamr@2: const TUint KIfCanSetMTU			= 0x00000010;
williamr@2: 	
williamr@2: /**
williamr@2: Has a hardware address (ie needs ARP)
williamr@2: @internalAll
williamr@2: */
williamr@2: const TUint KIfHasHardwareAddr		= 0x00000020;	
williamr@2: 
williamr@2: /**
williamr@2: Can have its hardware address changed
williamr@2: @internalAll
williamr@2: */
williamr@2: const TUint KIfCanSetHardwareAddr	= 0x00000040;	
williamr@2: 
williamr@2: /**
williamr@2: Dialup interface
williamr@2: @internalAll
williamr@2: */
williamr@2: const TUint KIfIsDialup				= 0x00000080;	
williamr@2: 
williamr@2: // Control options level received by network interfaces
williamr@2: /** 
williamr@2:  * Option level for network interface driver options.
williamr@2:  * @internalTechnology 
williamr@2:  */
williamr@2: const TUint KSOLInterface			= 0x203;
williamr@2: 
williamr@2: // Option names
williamr@2: /** 
williamr@2:  * The current network interface driver operation parameters are written to the 
williamr@2:  * passed TSoIfInfo structure. 
williamr@2:  * 
williamr@2:  * An interface that supports only this is assumed IPv4 only.
williamr@2:  * 
williamr@2:  * anOption should be a TPckgBuf<TSoIfInfo>. 
williamr@2:  * 
williamr@2:  * @internalTechnology
williamr@2:  */
williamr@2: const TUint KSoIfInfo				= 0x101;		// Get Interface Information
williamr@2: 
williamr@2: /** 
williamr@2:  * Gets the interface's local hardware address, if the link layer is using addresses.
williamr@2:  * 
williamr@2:  * anOption should be a TPckgBuf<TSoIfInfo>.
williamr@2:  * 
williamr@2:  * The option is not supported until v7.0. 
williamr@2:  * 
williamr@2:  * @internalTechnology
williamr@2:  */
williamr@2: const TUint KSoIfHardwareAddr		= 0x102;		// Get Hardware Address
williamr@2: 
williamr@2: /** 
williamr@2:  * Gets the current network interface driver configuration options.
williamr@2:  * 
williamr@2:  * There may be three kind of interfaces: IPv4 only, IPv6 only and hybrid IPv4/IPv6. 
williamr@2:  * The last one is passing traffic for both protocols and thus accepts either 
williamr@2:  * family in a single KSoIfConfig call. Hybrid interfaces must be queried twice, 
williamr@2:  * once for IPv4 and once for IPv6, to get both the IPv4 and the IPv6 settings.
williamr@2:  * 
williamr@2:  * For IPv4, anOption should be a TPckgBuf<TSoInetIfConfig>, for IPv6 TPckgBuf<TSoInet6IfConfig>.
williamr@2:  * 
williamr@2:  * The iFamily field in either TSoInetIfConfig or TSoInet6IfConfig must be set 
williamr@2:  * to either KAfInet for IPv4 or KAfInet6 for IPv6) before the call. If the family 
williamr@2:  * is not supported by the interface, it returns KErrNotSupported. 
williamr@2:  * 
williamr@2:  * @internalTechnology
williamr@2:  */
williamr@2: const TUint KSoIfConfig				= 0x103;		// Get Network parameters
williamr@2: 
williamr@2: /** 
williamr@2:  * For the IPv4 only stack, compares the passed address with the current local 
williamr@2:  * address, and returns KErrBadName if not equal.
williamr@2:  * 
williamr@2:  * anOption should be a TPckgBuf< TInetAddr >.
williamr@2:  * 
williamr@2:  * This is not used for the IPv4/v6 stack. 
williamr@2:  * 
williamr@2:  * @internalTechnology
williamr@2:  */
williamr@2: const TUint KSoIfCompareAddr		= 0x104;		// Compare address with one passed in
williamr@2: 
williamr@2: /** Retrieve IAP and NID information 
williamr@2:  * 
williamr@2:  * @internalTechnology
williamr@2:  */
williamr@2: const TUint KSoIfGetConnectionInfo	= 0xf001;		// Retrieve IAP and NID information
williamr@2: 
williamr@2: /**
williamr@2: @internalComponent
williamr@2: */
williamr@2: const TUint KMaxInterfaceName=32;
williamr@2: 
williamr@2: /** 
williamr@2:  * Holds the name of a network interface. 
williamr@2:  * 
williamr@2:  * This is used in TSoIfInfo. 
williamr@2:  * 
williamr@2:  * @internalTechnology
williamr@2:  */
williamr@2: typedef TBuf<KMaxInterfaceName> TInterfaceName;
williamr@2: 
williamr@2: class TInetIfConfig
williamr@2: // Information which allows IP to enter route table entries
williamr@2: /** 
williamr@2:  * Describes the IP routing options for a network interface. 
williamr@2:  * 
williamr@2:  * It is used in TSoInetIfConfig. 
williamr@2:  * 
williamr@2:  * @internalComponent
williamr@2:  */
williamr@2: 	{
williamr@2: public:
williamr@2: 	/** Interface IP address. */
williamr@2: 	TInetAddr iAddress;
williamr@2: 	/** IP netmask. */
williamr@2: 	TInetAddr iNetMask;
williamr@2: 	/** IP broadcast address. */
williamr@2: 	TInetAddr iBrdAddr;
williamr@2: 	/** IP default gateway or peer address (if known). */
williamr@2: 	TInetAddr iDefGate;
williamr@2: 	/** IP primary name server (if any). */
williamr@2: 	TInetAddr iNameSer1;
williamr@2: 	/** IP secondary name server (if any). */
williamr@2: 	TInetAddr iNameSer2;
williamr@2: 	};
williamr@2: 
williamr@2: class TSoIfInfo
williamr@2: // Socket option structure for KSoIfInfo
williamr@2: /** 
williamr@2:  * Current network interface operation parameters.
williamr@2:  * 
williamr@2:  * It is returned by RSocket::GetOpt(), when that function is called with anOptionLevel 
williamr@2:  * set to KSOLInterface and anOptionName set to KSoIfInfo. 
williamr@2:  *
williamr@2:  * @internalTechnology
williamr@2:  */
williamr@2: 	{
williamr@2: public:
williamr@2: 	/** Feature flags. Possible values are defined in in_iface.h. */
williamr@2: 	TUint iFeatures;		// Feature flags
williamr@2: 	/** Maximum transmission unit. */
williamr@2: 	TInt iMtu;				// Max frame size
williamr@2: 	/** An approximation of the interface speed in Kbps. */
williamr@2: 	TInt iSpeedMetric;		// Indication of performance, approx to Kbps
williamr@2: 	/** Interface protocol name, ipcp::\<port\>. */
williamr@2: 	TInterfaceName iName;
williamr@2: 	};
williamr@2: 
williamr@2: class TSoIfHardwareAddr
williamr@2: // Socket option structure for KSoIfHardwareAddr 
williamr@2: /** 
williamr@2:  * An interface's local hardware address.
williamr@2:  * 
williamr@2:  * This is obtained using KSoIfHardwareAddr. 
williamr@2:  *
williamr@2:  * @internalComponent
williamr@2:  */
williamr@2: 	{
williamr@2: public:
williamr@2: 	/** Local hardware address. */
williamr@2: 	TSockAddr iHardwareAddr;
williamr@2: 	};
williamr@2: 
williamr@2: class TSoIfConfigBase
williamr@2: /** 
williamr@2:  * Base class for TSoInetIfConfig, which simply identifies the protocol family 
williamr@2:  * using the interface. 
williamr@2:  *
williamr@2:  * @internalComponent
williamr@2:  */
williamr@2: 	{
williamr@2: public:
williamr@2: 	/** The protocol family, e.g. KAfInet. */
williamr@2: 	TUint iFamily;
williamr@2: 	};
williamr@2: 
williamr@2: class TSoInetIfConfig : public TSoIfConfigBase
williamr@2: /** 
williamr@2:  * Describes the current interface routing configuration. 
williamr@2:  * 
williamr@2:  * It is returned by RSocket::GetOpt(), when this function is called with anOptionLevel 
williamr@2:  * set to KSOLInterface and anOptionName set to KSoIfConfig. 
williamr@2:  *
williamr@2:  * @internalTechnology
williamr@2:  */
williamr@2: 	{
williamr@2: public:
williamr@2: 	/** Current interface routing configuration parameters. */
williamr@2: 	TInetIfConfig iConfig;
williamr@2: 	};
williamr@2: 
williamr@2: enum TIfProgressNotification
williamr@2: /**
williamr@2:  * @internalAll
williamr@2:  *
williamr@2:  * @deprecated v7.0s - maintained for compatibility with v6.1
williamr@2:  *
williamr@2:  * New software should use the progress ranges defined in nifvar.h
williamr@2:  *
williamr@2:  */
williamr@2: 	{
williamr@2: 	EIfProgressLinkUp = KMinInterfaceProgress,
williamr@2: 	EIfProgressLinkDown,
williamr@2: 	EIfProgressAuthenticationComplete
williamr@2: 	};
williamr@2: 
williamr@2: /**
williamr@2: @internalAll
williamr@2: */
williamr@2: const TInt KErrIfAuthenticationFailure = -3050;
williamr@2: 
williamr@2: /**
williamr@2: @internalComponent
williamr@2: */
williamr@2: const TInt KErrIfAuthNotSecure         = -3051;
williamr@2: 
williamr@2: /**
williamr@2: @internalComponent
williamr@2: */
williamr@2: const TInt KErrIfAccountDisabled       = -3052;
williamr@2: 
williamr@2: /**
williamr@2: @internalComponent
williamr@2: */
williamr@2: const TInt KErrIfRestrictedLogonHours  = -3053;
williamr@2: 
williamr@2: /**
williamr@2: @internalComponent
williamr@2: */
williamr@2: const TInt KErrIfPasswdExpired         = -3054;
williamr@2: 
williamr@2: /**
williamr@2: @internalComponent
williamr@2: */
williamr@2: const TInt KErrIfNoDialInPermission    = -3055;
williamr@2: 
williamr@2: /**
williamr@2: @internalComponent
williamr@2: */
williamr@2: const TInt KErrIfChangingPassword      = -3056;
williamr@2: 
williamr@2: /**
williamr@2: @internalComponent
williamr@2: */
williamr@2: const TInt KErrIfCallbackNotAcceptable = -3057;
williamr@2: 
williamr@2: /**
williamr@2: @internalComponent
williamr@2: */
williamr@2: const TInt KErrIfDNSNotFound		   = -3058;
williamr@2: 
williamr@2: /**
williamr@2: @internalComponent
williamr@2: */
williamr@2: const TInt KErrIfLRDBadLine			   = -3059;   
williamr@2: 
williamr@2: #endif // __IN_IFACE_H__