• Main Page
  • Classes
  • Files
  • File List

/Users/yzchen/ns/ns-allinone-2.33/ns-2.33/emulate/tcptap.h

00001 /*
00002  * Copyright (c) 1997, 1998 The Regents of the University of California.
00003  * All rights reserved.
00004  * 
00005  * Redistribution and use in source and binary forms, with or without
00006  * modification, are permitted provided that the following conditions
00007  * are met:
00008  * 1. Redistributions of source code must retain the above copyright
00009  *    notice, this list of conditions and the following disclaimer.
00010  * 2. Redistributions in binary form must reproduce the above copyright
00011  *    notice, this list of conditions and the following disclaimer in the
00012  *    documentation and/or other materials provided with the distribution.
00013  * 3. All advertising materials mentioning features or use of this software
00014  *    must display the following acknowledgement:
00015  *      This product includes software developed by the MASH Research
00016  *      Group at the University of California, Berkeley.
00017  * 4. Neither the name of the University nor of the Research Group may be used
00018  *    to endorse or promote products derived from this software without
00019  *    specific prior written permission.
00020  * 
00021  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
00022  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00023  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00024  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
00025  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00026  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
00027  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
00028  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00029  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
00030  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
00031  * SUCH DAMAGE.
00032  *
00033  * @(#) $Header: /cvsroot/nsnam/ns-2/emulate/tcptap.h,v 1.5 2003/02/15 00:46:49 buchheim Exp $ (ISI)
00034  */
00035 
00036 #ifndef tcptap_h
00037 #define tcptap_h
00038 
00039 #include "tap.h"
00040 #include <netinet/in.h>
00041 #include <netinet/in_systm.h>
00042 #include <netinet/ip.h>
00043 #include <netinet/tcp.h>
00044 #include <sys/socket.h>
00045 #include "tcp.h"
00046 #include "ip.h"
00047 
00048 
00049 #define TCP_HEADER_LEN        (sizeof(struct tcphdr))
00050 #define IP_HEADER_LEN         (sizeof(struct ip))
00051 #define DEFAULT_ADV_WINDOW    65535 /* Large enough so that min(cong, adv 
00052                                         window) is cong */
00053 #define DEFAULT_EXT_PORT       8192
00054 #define DEFAULT_EXT_ADDR "192.168.123.116"
00055 
00056 #define DEFAULT_NS_PORT        16384
00057 #define DEFAULT_NS_ADDR   "192.168.123.253"
00058 
00059 
00060 #define TCPIP_BASE_PKTSIZE      40      /* base TCP/IP header in real life */
00061                                         /* Grabbed from tcp-full-bay.h */ 
00062 
00063 /* 
00064    Used in the ns TCP packets created by the TCPTap.  We don't have any 
00065    more information in the TCPTap Agent to deduce any other reason. 
00066    So we set it as unknown.
00067 */
00068 #define REASON_UNKNOWN   10   /* To support TCP debugging in TCP header
00069                                  reason field. */
00070 
00071 
00072 struct pseudohdr  {
00073   struct in_addr source_address;
00074   struct in_addr dest_address;
00075   unsigned char place_holder;
00076   unsigned char protocol;
00077   unsigned short length;
00078 } pseudohdr;
00079 
00080 
00081 
00082 
00083 class TCPTapAgent : public TapAgent {
00084  private:
00085   struct sockaddr_in nsnode, extnode;
00086   unsigned short adv_window;
00087   int dropp;
00088 
00089   unsigned short trans_check(unsigned char, char *, int ,
00090                              struct in_addr, struct in_addr);
00091   unsigned short in_cksum(unsigned short *,int);
00092   void ip_gen(char *, unsigned char, struct in_addr, struct in_addr, 
00093               unsigned short, unsigned char );
00094   void tcp_gen(char *, unsigned short, unsigned short, Packet *);
00095   void recvpkt();
00096   int sendpkt(Packet*);
00097   void processpkt(Packet *, const struct timeval &);
00098   static void pkt_handler(void *, Packet *, const struct timeval &);
00099   
00100  public:
00101   TCPTapAgent();
00102   int command(int, const char*const*);
00103 
00104 };
00105 
00106 #endif /* tcptap_h */
00107 
00108 
00109 
00110 
00111 
00112 

Generated on Tue Aug 10 2010 16:16:07 for ns-2.33 by  doxygen 1.7.1