Internet Protocol (IP)
Description: OpenSS7 Project Manual Pages Internet Protocol IP Transport
RAWIP
Section: The OpenSS7 Project Devices (4)
Updated: Mon, 08 Dec 2008 11:53:22 GMT
Index
Return to Main Contents
NAME
rawip, rawip2
- Raw Internet Protocol Stream
SYNOPSIS
#include <sys/socket.h>
#include <netinet/ip.h>
#include <sys/tpi_ip.h>
#include <sys/xti_ip.h>
-
int raw_stream = open(raw_device, flags);
-
int raw_xtistr = t_open(raw_device, flags);
-
int raw_socket = socket(PF_INET, SOCK_RAWI, IPPROTO_IP);
DESCRIPTION
RAWIP
is an implementation of the Internet Protocol
(IP)
defined in RFC 791[1..5].
It implements a connectionless, unreliable datagram packet service. Packets may be reordered or
duplicated before they arrive.
RAWIP
generates and checks checksums to catch transmission errors.
RAWIP
is implemented as a
STREAMS(4)
pseudo-device driver using the
INET(4)
OpenSS7
package for
Linux Fast-STREAMS[6].
The
OpenSS7
package translates Linux native
raw(7)
sockets into TPI[7]
transport provider Streams suitable for use with XTI[8, 9],
(see
xti(3)).
RAWIP2
(the second generation IP driver) differs from
RAWIP
largely in internal implementation.
RAWIP2
accesses the IP layer of
Linux
directly, rather than opening a socket internal to the kernel.
RAWIP
provides one connectionless TPI Stream type. To select the Stream,
raw_device
can be one of the following:
- /dev/rawip, /dev/inet/rawip, /dev/streams/inet/rawip.
- This device provides the
RAWIP
protocol services using the T-primitives of the Transport Provider Interface[7].
tpi(7),
used for Internet Protocol, as described in
tpi_ip(7).
The
tpi(7)
interface provided on a Stream opening this device is suitable for use with the
xnet(3)
or
xti(3)
library and provides
RAWIP
interface using XTI[8, 9]
as described in
xti_ip(3).
RAWIP2
provides one connectionless or pseudo-connection-oriented TPI Stream type. To select the Stream,
raw_device
can be one of the following:
- /dev/rawip2, /dev/streams/rawip.
- The same as above, but accesses the second generation
RAWIP2
driver instead of the
UDP
driver.
RAWIP
provides one socket type for use by the
sockets(3)
library
socket(7)
calls.
RAWIP
provides sockets in the protocol families
PF_INET and PF_INET6
using the protocol number
IPPROTO_IP.
The
socket_type
can be one of the following:
- SOCK_RAW
- A standard
SOCK_RAW
socket that preserves message boundaries, does not Nagle, and provides only
unordered and unreliable delivery in a connectionless association. This
socket uses the underlying Linux socket implementation,
raw(7)
directly. See
raw(7)
for more information.
USAGE
The following entries in
/etc/protosw
provides the information for
socksys(4)
to use the devices:
PF_INET | SOCK_RAW | IPPROTO_IP | /dev/rawip | tpi | clts |
|
PF_INET6 | SOCK_RAW | IPPROTO_IP | /dev/rawip | tpi | clts |
|
For additional information, see
socksys(4) and protosw(5).
IOCTLS
All interfaces support a set of management IO controls using
ioctl(2)
and
streamio(7)
I_STR
system calls on the
raw_stream, raw_xtistr or raw_socket.
These management controls are described in
timod(4), sockmod(4) and socksys(4).
See also
raw(7)
for sockets.
NOTICES
RAWIP
has several implementations. This manpage is for the
INET(4)
implementation that provides
tpi(7)
access to the Linux NET4 version of
RAWIP.
For more information on the Linux NET4 version, see
raw(7).
IMPLEMENTATION
There are now two
STREAMS
implementations for
rawip:
RAWIP
and
RAWIP2.
These implementations differ as follows:
- RAWIP
- This implementation is part of the
streams-inet
driver in the
The OpenSS7 Project
package.
The
streams-inet
driver implements
rawip
by opening a
Linux
rawip
socket internal to kernel and providing a TPI[7]
interface to that socket. This approach has been termed
xtios
(XTI over Sockets).
The approach is rather inefficient in that two layers of interface code are
executed. Also, sockets does not have the same capabilities that
STREAMS
does in many regards, particularly internal to the kernel. The approach is
not only inefficient, but is less usable by other
STREAMS
modules and multiplexing drivers.
- RAWIP2
- This implementation if part of the
streams-rawip
driver in the
The OpenSS7 Project
package. This implementation uses the direct approach of hooking into the
Linux
kernel at the
ip(7)
level, using direct function calls, and does not open a socket. This approach
is more efficient in that only
STREAMS
interface code is invoked in the data path.
The
RAWIP
implementation is the traditional one for the
The OpenSS7 Project
package.
RAWIP2
was an afterthought.
One of the reasons for implementing a separate
RAWIP2
driver was to be able to do performance comparisons between the two
approaches. Also, using the
RAWIP2
driver, it is possible to make fair performance (throughput, latency, CPU
occupancy) comparisons between the NET4 Linux sockets implementation of
rawip
and the
STREAMS
implementation.
It was intended that the
netperf(1)
package be used to provide performance histogram comparisons between the two
implementations.
It may seem like a lot of trouble to go to, however, lkml (Linux Kernel
Mailing List) has made some very strong (and unsupported in the author's
opinion) statements regarding the performance of
STREAMS
and that of sockets for Internet protocols. Performance tests of this nature
could dis-spell those rumours.
FILES
<sys/socket.h>,
<netinet/ip>,
<sys/tpi.h>,
<sys/tpi_ip.h>,
<sys/xti.h>,
<sys/xti_ip.h>.
DEVICES
/dev/rawip,
/dev/inet/rawip,
/dev/streams/inet/rawip,
/dev/rawip2,
/dev/streams/rawip.
SEE ALSO
INET(4),
ioctl(2),
ip(7),
STREAMS(9),
protosw(5),
socket(7),
sockets(3),
sockmod(4),
socksys(4),
STREAMS(4),
raw(7),
rawip_ioctl(4),
timod(4),
tpi(7),
tpi_ip(7),
xnet(3),
xti(3),
xti_ip(3).
BUGS
RAWIP2
has no known bugs.
RAWIP
has the known bug that is cannot receive zero length messages (but it can send
them).
COMPATIBILITY
The
The OpenSS7 Project
implementation of
UDP
for
STREAMS
is largely compatible with
STREAMS-based
implementations such as Lachman or Mentat TCP/IP stacks and
Solaris®
documentation[10].
CONFORMANCE
XNS 5.2[9].
Conformance is validated using the
test-inet_raw(8)
validation test suite executable.
HISTORY
strinet 0.8.2
was released in 2002 and was since part of the Linux STREAMS (LiS)[11]
package, and is now part of
Linux Fast-STREAMS[6].
The second generation driver was completed in 2006.
The first generation driver was upgraded significantly in
strinet 0.9.2.7
release in 2008.
REFERENCES
- [1]
- RFC 791/STD 5,
Internet Protocol --- DARPA Internet Program --- Protocol Specification, September 1981, J. Postel, ed., The Internet Society.
(Also ST0005) (Status: STANDARD) (Updated by RFC 1349)
<http://www.ietf.org/rfc/rfc0791.txt>
- [2]
- RFC 1349,
Type of Service in the Internet Protocol Suite, July 1992, Philip Almquist, ed., The Internet Society.
(Obsoleted by RFC 2474) (Updates RFC 1248, RFC 1247, RFC 1195, RFC 1123, RFC 1122, RFC 1060, RFC 0791) (Status: PROPOSED STANDARD)
<http://www.ietf.org/rfc/rfc1349.txt>
- [3]
- RFC 2474,
Definition of the Differentiated Services Field (DS Field) in the IPv4 and IPv6 Headers, December 1998, K. Nichols, S. Blake, F. Baker and D. Black, The Internet Society.
(Obsoletes RFC 1455, RFC 1349) (Updated by RFC 3168, RFC 3260) (Status: PROPOSED STANDARD)
<http://www.ietf.org/rfc/rfc2474.txt>
- [4]
- RFC 3168,
The Addition of Explicit Congestion Notification (ECN) to IP, September 2001, K. K. Ramakrishnan, ed., The Internet Society.
(Obsoletes RFC 2481) (Updates RFC 2474, RFC 2401, RFC 793) (Status: PROPOSED STANDARD)
<http://www.ietf.org/rfc/rfc3168.txt>
- [5]
- RFC 3260,
New Terminology and Clarifications for Diffserv, April 2002, D. Grossman, ed., The Internet Society.
(Updates RFC 2474, RFC 2475, RFC 2597) (Status: INFORMATIONAL)
<http://www.ietf.org/rfc/rfc3260.txt>
- [6]
- streams-0.9.2,
Linux Fast-STREAMS (LfS) 0.9.2 Source Code, Brian Bidulock, ed., OpenSS7 Corporation.
<http://www.openss7.org/>
- [7]
- TPI Revision 2.0.0,
Open Group CAE Specification:
Transport Provider Interface (TPI) Specification, Revision 2.0.0, Draft 2, 1999, (Berkshire, UK), OpenGroup, Open Group Publication.
<http://www.opengroup.org/onlinepubs/>
- [8]
- XTI/TLI Revision 1.0,
Open Group CAE Specification:
XOpen Transport Interface, Revision 1, n.d., (Berkshire, UK), XPG, X Programmer's Group.
<http://www.opengroup.org/onlinepubs/>
- [9]
- XNS,
Open Group CAE Specification:
Technical Standard: Network Services (XNS), Issue 5.2, Draft 2, 1999, (Berkshire, UK), OpenGroup, Open Group Publication.
[ISBN 1-85912-241-8]
<http://www.opengroup.org/onlinepubs/>
- [10]
- Solaris® 8,
Solaris 8 Docmentation, 2001, (Santa Clara, California), Sun Microsystems, Inc., Sun.
<http://docs.sun.com/>
- [11]
- LIS 2.18,
Linux STREAMS (LiS) 2.18.6 Source Code, Brian Bidulock, ed., OpenSS7 Corporation.
<http://www.openss7.org/>
TRADEMARKS
- OpenSS7tm
- is a trademark of OpenSS7 Corporation.
- Linux®
- is a registered trademark of Linus Torvalds.
- UNIX®
- is a registered trademark of The Open Group.
- Solaris®
- is a registered trademark of Sun Microsystems.
Other trademarks are the property of their respective owners.
IDENTIFICATION
-
The OpenSS7 Project: Package OpenSS7 version 0.9.2 released Mon, 08 Dec 2008 11:53:22 GMT.
Copyright©1997-2008OpenSS7 Corp.
All Rights Reserved.
(See roff source for permission notice.)
Index
- NAME
- SYNOPSIS
- DESCRIPTION
- USAGE
- IOCTLS
- NOTICES
- IMPLEMENTATION
- FILES
- DEVICES
- SEE ALSO
- BUGS
- COMPATIBILITY
- CONFORMANCE
- HISTORY
- REFERENCES
- TRADEMARKS
- IDENTIFICATION
This document was created by
man2html,
using the manual pages.
Time: 11:53:21 GMT, December 08, 2008