Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 12 Dec 2001 13:14:55 -0600
From:      "Jim Fleming" <jfleming@anet.com>
To:        "Julian Elischer" <julian@elischer.org>
Cc:        "Jordan Hubbard" <jkh@winston.freebsd.org>, "Andre Oppermann" <oppermann@pipeline.ch>, <freebsd-arch@FreeBSD.ORG>
Subject:   Re: RIFRAF Routing Changes for FreeBSD 
Message-ID:  <061501c18341$49f6aba0$1000a8c0@Unir.com>
References:  <Pine.BSF.4.21.0112121044560.5654-100000@InterJet.elischer.org>

next in thread | previous in thread | raw e-mail | index | archive | help
> > + /* Check for possible new Galaxy setting */
> > + if(((src_addr&0x0E00)!=0)&&((src_addr&0xFFFF0000)==(dst_addr&0xFFFF0000))){
> > + galaxy_in=(src_addr&0x0E00)>>8;

E000 in both cases....not 0E00

----- Original Message ----- 
From: "Julian Elischer" <julian@elischer.org>
To: "Jim Fleming" <jfleming@anet.com>
Cc: "Jordan Hubbard" <jkh@winston.freebsd.org>; "Andre Oppermann" <oppermann@pipeline.ch>; <freebsd-arch@FreeBSD.ORG>
Sent: Wednesday, December 12, 2001 12:45 PM
Subject: Re: RIFRAF Routing Changes for FreeBSD 


> Now it belongs in freebsd-net :-)
> 
> 
> On Wed, 12 Dec 2001, Jim Fleming wrote:
> 
> > 
> > ----- Original Message ----- 
> > From: "Jordan Hubbard" <jkh@winston.freebsd.org>
> > To: "Jim Fleming" <jfleming@anet.com>
> > Cc: "Andre Oppermann" <oppermann@pipeline.ch>; <freebsd-arch@FreeBSD.ORG>
> > Sent: Wednesday, December 12, 2001 11:39 AM
> > Subject: Re: RIFRAF Routing Changes for FreeBSD 
> > 
> > 
> > > > It all boils down to fairness.
> > > > Which list do you think is more fair ?
> > > 
> > > I think it boils down to something simpler than that:  What does this
> > > have to do with FreeBSD?  
> > > 
> > > The freebsd-arch list isn't for general discussion about things which
> > > _might_ be relevant to FreeBSD users, such as potentially interesting
> > > 3rd-party technologies or a great sale on hardware at Fred's PC Shack
> > > this week.  This list is for discussing proposed changes to FreeBSD,
> > > ideally with sample code (which is applicable and ported to FreeBSD)
> > > attached.  That's all there is to it.  If you want to discuss more
> > > speculative or contraversial issues, freebsd-chat is the right mailing
> > > list for that kind of thing.
> > > 
> > > - Jordan
> > > 
> > This may help...
> > http://www.dot-biz.com/IPv4/Tutorial/
> > http://www.RepliGate.net
> > 
> > The Netfilter Project: Packet Mangling for Linux 2.4
> > http://netfilter.samba.org
> > 
> > Jim Fleming
> > http://www.IPv8.info
> > IPv16....One Better !!
> > 
> > ----- Original Message ----- 
> > From: "Charlie Root" <root@IPv8.UNIR.COM>
> > To: <jfleming@anet.com>
> > Sent: Wednesday, December 12, 2001 4:45 AM
> > 
> > 
> > > diff -c -r /unir/sys/netinet/ip.h netinet/ip.h
> > > *** /unir/sys/netinet/ip.h Wed Dec 22 19:13:20 1999
> > > --- netinet/ip.h Tue Dec 11 13:59:38 2001
> > > ***************
> > > *** 43,48 ****
> > > --- 43,53 ----
> > >    */
> > >   #define IPVERSION 4
> > >   
> > > + #define IPXX_V4 4
> > > + #define IPXX_V5 5
> > > + #define IPXX_V7 7
> > > + #define IPXX_V8 8
> > > + 
> > >   /*
> > >    * Structure of an internet header, naked of options.
> > >    */
> > > ***************
> > > *** 61,73 ****
> > >   #endif /* not _IP_VHL */
> > >   u_char ip_tos; /* type of service */
> > >   u_short ip_len; /* total length */
> > > ! u_short ip_id; /* identification */
> > >   u_short ip_off; /* fragment offset field */
> > >   #define IP_RF 0x8000 /* reserved fragment flag */
> > >   #define IP_DF 0x4000 /* dont fragment flag */
> > >   #define IP_MF 0x2000 /* more fragments flag */
> > >   #define IP_OFFMASK 0x1fff /* mask for fragmenting bits */
> > >   u_char ip_ttl; /* time to live */
> > >   u_char ip_p; /* protocol */
> > >   u_short ip_sum; /* checksum */
> > >   struct in_addr ip_src,ip_dst; /* source and dest address */
> > > --- 66,89 ----
> > >   #endif /* not _IP_VHL */
> > >   u_char ip_tos; /* type of service */
> > >   u_short ip_len; /* total length */
> > > ! #define IPXX_UNIRVERSE_DEFAULT 0 /* Default IPv8 UnirVerse Value */
> > > ! u_char ip_gate; /* UnirVerse/StarGate */
> > > ! u_char ip_id; /* identification */
> > >   u_short ip_off; /* fragment offset field */
> > > + #define IPXX_FLAG 0x8000 /* IPvXX flag */
> > >   #define IP_RF 0x8000 /* reserved fragment flag */
> > >   #define IP_DF 0x4000 /* dont fragment flag */
> > >   #define IP_MF 0x2000 /* more fragments flag */
> > >   #define IP_OFFMASK 0x1fff /* mask for fragmenting bits */
> > >   u_char ip_ttl; /* time to live */
> > > + #define IPXX_GALAXY 033 /* IPv8 Galaxy Value for 3:219 .INFO */
> > > + #define IPXX_P_MASK 0x3F
> > > + #define IPXX_ICMP_VAL 1
> > > + #define IPXX_ICMP_FLAG 0x40
> > > + #define IPXX_TCP_VAL 6
> > > + #define IPXX_TCP_FLAG 0x80
> > > + #define IPXX_UDP_VAL 16
> > > + #define IPXX_UDP_FLAG 0xC0
> > >   u_char ip_p; /* protocol */
> > >   u_short ip_sum; /* checksum */
> > >   struct in_addr ip_src,ip_dst; /* source and dest address */
> > > diff -c -r /unir/sys/netinet/ip_icmp.c netinet/ip_icmp.c
> > > *** /unir/sys/netinet/ip_icmp.c Tue Jul  3 11:01:46 2001
> > > --- netinet/ip_icmp.c Tue Dec 11 14:00:00 2001
> > > ***************
> > > *** 121,132 ****
> > >   #endif
> > >   
> > >   static void icmp_reflect __P((struct mbuf *));
> > > ! static void icmp_send __P((struct mbuf *, struct mbuf *));
> > >   static int ip_next_mtu __P((int, int));
> > >   
> > >   extern struct protosw inetsw[];
> > >   
> > >   /*
> > >    * Generate an error packet of type error
> > >    * in response to bad packet ip.
> > >    */
> > > --- 121,396 ----
> > >   #endif
> > >   
> > >   static void icmp_reflect __P((struct mbuf *));
> > > ! static void icmp_send __P((struct mbuf *, struct mbuf *, int));
> > >   static int ip_next_mtu __P((int, int));
> > >   
> > >   extern struct protosw inetsw[];
> > >   
> > >   /*
> > > + * Table used to reverse the 4-bit source and destination values
> > > + * in the 8-bit TOS field.
> > > + */
> > > + 
> > > + unsigned char reverse_nibbles[256] = {
> > > + /*00*/ 0x00,
> > > + /*01*/ 0x10,
> > > + /*02*/ 0x20,
> > > + /*03*/ 0x30,
> > > + /*04*/ 0x40,
> > > + /*05*/ 0x50,
> > > + /*06*/ 0x60,
> > > + /*07*/ 0x70,
> > > + /*08*/ 0x80,
> > > + /*09*/ 0x90,
> > > + /*0a*/ 0xa0,
> > > + /*0b*/ 0xb0,
> > > + /*0c*/ 0xc0,
> > > + /*0d*/ 0xd0,
> > > + /*0e*/ 0xe0,
> > > + /*0f*/ 0xf0,
> > > + /*10*/ 0x01,
> > > + /*11*/ 0x11,
> > > + /*12*/ 0x21,
> > > + /*13*/ 0x31,
> > > + /*14*/ 0x41,
> > > + /*15*/ 0x51,
> > > + /*16*/ 0x61,
> > > + /*17*/ 0x71,
> > > + /*18*/ 0x81,
> > > + /*19*/ 0x91,
> > > + /*1a*/ 0xa1,
> > > + /*1b*/ 0xb1,
> > > + /*1c*/ 0xc1,
> > > + /*1d*/ 0xd1,
> > > + /*1e*/ 0xe1,
> > > + /*1f*/ 0xf1,
> > > + /*20*/ 0x02,
> > > + /*21*/ 0x12,
> > > + /*22*/ 0x22,
> > > + /*23*/ 0x32,
> > > + /*24*/ 0x42,
> > > + /*25*/ 0x52,
> > > + /*26*/ 0x62,
> > > + /*27*/ 0x72,
> > > + /*28*/ 0x82,
> > > + /*29*/ 0x92,
> > > + /*2a*/ 0xa2,
> > > + /*2b*/ 0xb2,
> > > + /*2c*/ 0xc2,
> > > + /*2d*/ 0xd2,
> > > + /*2e*/ 0xe2,
> > > + /*2f*/ 0xf2,
> > > + /*30*/ 0x03,
> > > + /*31*/ 0x13,
> > > + /*32*/ 0x23,
> > > + /*33*/ 0x33,
> > > + /*34*/ 0x43,
> > > + /*35*/ 0x53,
> > > + /*36*/ 0x63,
> > > + /*37*/ 0x73,
> > > + /*38*/ 0x83,
> > > + /*39*/ 0x93,
> > > + /*3a*/ 0xa3,
> > > + /*3b*/ 0xb3,
> > > + /*3c*/ 0xc3,
> > > + /*3d*/ 0xd3,
> > > + /*3e*/ 0xe3,
> > > + /*3f*/ 0xf3,
> > > + /*40*/ 0x04,
> > > + /*41*/ 0x14,
> > > + /*42*/ 0x24,
> > > + /*43*/ 0x34,
> > > + /*44*/ 0x44,
> > > + /*45*/ 0x54,
> > > + /*46*/ 0x64,
> > > + /*47*/ 0x74,
> > > + /*48*/ 0x84,
> > > + /*49*/ 0x94,
> > > + /*4a*/ 0xa4,
> > > + /*4b*/ 0xb4,
> > > + /*4c*/ 0xc4,
> > > + /*4d*/ 0xd4,
> > > + /*4e*/ 0xe4,
> > > + /*4f*/ 0xf4,
> > > + /*50*/ 0x05,
> > > + /*51*/ 0x15,
> > > + /*52*/ 0x25,
> > > + /*53*/ 0x35,
> > > + /*54*/ 0x45,
> > > + /*55*/ 0x55,
> > > + /*56*/ 0x65,
> > > + /*57*/ 0x75,
> > > + /*58*/ 0x85,
> > > + /*59*/ 0x95,
> > > + /*5a*/ 0xa5,
> > > + /*5b*/ 0xb5,
> > > + /*5c*/ 0xc5,
> > > + /*5d*/ 0xd5,
> > > + /*5e*/ 0xe5,
> > > + /*5f*/ 0xf5,
> > > + /*60*/ 0x06,
> > > + /*61*/ 0x16,
> > > + /*62*/ 0x26,
> > > + /*63*/ 0x36,
> > > + /*64*/ 0x46,
> > > + /*65*/ 0x56,
> > > + /*66*/ 0x66,
> > > + /*67*/ 0x76,
> > > + /*68*/ 0x86,
> > > + /*69*/ 0x96,
> > > + /*6a*/ 0xa6,
> > > + /*6b*/ 0xb6,
> > > + /*6c*/ 0xc6,
> > > + /*6d*/ 0xd6,
> > > + /*6e*/ 0xe6,
> > > + /*6f*/ 0xf6,
> > > + /*70*/ 0x07,
> > > + /*71*/ 0x17,
> > > + /*72*/ 0x27,
> > > + /*73*/ 0x37,
> > > + /*74*/ 0x47,
> > > + /*75*/ 0x57,
> > > + /*76*/ 0x67,
> > > + /*77*/ 0x77,
> > > + /*78*/ 0x87,
> > > + /*79*/ 0x97,
> > > + /*7a*/ 0xa7,
> > > + /*7b*/ 0xb7,
> > > + /*7c*/ 0xc7,
> > > + /*7d*/ 0xd7,
> > > + /*7e*/ 0xe7,
> > > + /*7f*/ 0xf7,
> > > + /*80*/ 0x08,
> > > + /*81*/ 0x18,
> > > + /*82*/ 0x28,
> > > + /*83*/ 0x38,
> > > + /*84*/ 0x48,
> > > + /*85*/ 0x58,
> > > + /*86*/ 0x68,
> > > + /*87*/ 0x78,
> > > + /*88*/ 0x88,
> > > + /*89*/ 0x98,
> > > + /*8a*/ 0xa8,
> > > + /*8b*/ 0xb8,
> > > + /*8c*/ 0xc8,
> > > + /*8d*/ 0xd8,
> > > + /*8e*/ 0xe8,
> > > + /*8f*/ 0xf8,
> > > + /*90*/ 0x09,
> > > + /*91*/ 0x19,
> > > + /*92*/ 0x29,
> > > + /*93*/ 0x39,
> > > + /*94*/ 0x49,
> > > + /*95*/ 0x59,
> > > + /*96*/ 0x69,
> > > + /*97*/ 0x79,
> > > + /*98*/ 0x89,
> > > + /*99*/ 0x99,
> > > + /*9a*/ 0xa9,
> > > + /*9b*/ 0xb9,
> > > + /*9c*/ 0xc9,
> > > + /*9d*/ 0xd9,
> > > + /*9e*/ 0xe9,
> > > + /*9f*/ 0xf9,
> > > + /*a0*/ 0x0a,
> > > + /*a1*/ 0x1a,
> > > + /*a2*/ 0x2a,
> > > + /*a3*/ 0x3a,
> > > + /*a4*/ 0x4a,
> > > + /*a5*/ 0x5a,
> > > + /*a6*/ 0x6a,
> > > + /*a7*/ 0x7a,
> > > + /*a8*/ 0x8a,
> > > + /*a9*/ 0x9a,
> > > + /*aa*/ 0xaa,
> > > + /*ab*/ 0xba,
> > > + /*ac*/ 0xca,
> > > + /*ad*/ 0xda,
> > > + /*ae*/ 0xea,
> > > + /*af*/ 0xfa,
> > > + /*b0*/ 0x0b,
> > > + /*b1*/ 0x1b,
> > > + /*b2*/ 0x2b,
> > > + /*b3*/ 0x3b,
> > > + /*b4*/ 0x4b,
> > > + /*b5*/ 0x5b,
> > > + /*b6*/ 0x6b,
> > > + /*b7*/ 0x7b,
> > > + /*b8*/ 0x8b,
> > > + /*b9*/ 0x9b,
> > > + /*ba*/ 0xab,
> > > + /*bb*/ 0xbb,
> > > + /*bc*/ 0xcb,
> > > + /*bd*/ 0xdb,
> > > + /*be*/ 0xeb,
> > > + /*bf*/ 0xfb,
> > > + /*c0*/ 0x0c,
> > > + /*c1*/ 0x1c,
> > > + /*c2*/ 0x2c,
> > > + /*c3*/ 0x3c,
> > > + /*c4*/ 0x4c,
> > > + /*c5*/ 0x5c,
> > > + /*c6*/ 0x6c,
> > > + /*c7*/ 0x7c,
> > > + /*c8*/ 0x8c,
> > > + /*c9*/ 0x9c,
> > > + /*ca*/ 0xac,
> > > + /*cb*/ 0xbc,
> > > + /*cc*/ 0xcc,
> > > + /*cd*/ 0xdc,
> > > + /*ce*/ 0xec,
> > > + /*cf*/ 0xfc,
> > > + /*d0*/ 0x0d,
> > > + /*d1*/ 0x1d,
> > > + /*d2*/ 0x2d,
> > > + /*d3*/ 0x3d,
> > > + /*d4*/ 0x4d,
> > > + /*d5*/ 0x5d,
> > > + /*d6*/ 0x6d,
> > > + /*d7*/ 0x7d,
> > > + /*d8*/ 0x8d,
> > > + /*d9*/ 0x9d,
> > > + /*da*/ 0xad,
> > > + /*db*/ 0xbd,
> > > + /*dc*/ 0xcd,
> > > + /*dd*/ 0xdd,
> > > + /*de*/ 0xed,
> > > + /*df*/ 0xfd,
> > > + /*e0*/ 0x0e,
> > > + /*e1*/ 0x1e,
> > > + /*e2*/ 0x2e,
> > > + /*e3*/ 0x3e,
> > > + /*e4*/ 0x4e,
> > > + /*e5*/ 0x5e,
> > > + /*e6*/ 0x6e,
> > > + /*e7*/ 0x7e,
> > > + /*e8*/ 0x8e,
> > > + /*e9*/ 0x9e,
> > > + /*ea*/ 0xae,
> > > + /*eb*/ 0xbe,
> > > + /*ec*/ 0xce,
> > > + /*ed*/ 0xde,
> > > + /*ee*/ 0xee,
> > > + /*ef*/ 0xfe,
> > > + /*f0*/ 0x0f,
> > > + /*f1*/ 0x1f,
> > > + /*f2*/ 0x2f,
> > > + /*f3*/ 0x3f,
> > > + /*f4*/ 0x4f,
> > > + /*f5*/ 0x5f,
> > > + /*f6*/ 0x6f,
> > > + /*f7*/ 0x7f,
> > > + /*f8*/ 0x8f,
> > > + /*f9*/ 0x9f,
> > > + /*fa*/ 0xaf,
> > > + /*fb*/ 0xbf,
> > > + /*fc*/ 0xcf,
> > > + /*fd*/ 0xdf,
> > > + /*fe*/ 0xef,
> > > + /*ff*/ 0xff
> > > + };
> > > + 
> > > + /*
> > >    * Generate an error packet of type error
> > >    * in response to bad packet ip.
> > >    */
> > > ***************
> > > *** 226,232 ****
> > >   nip->ip_len = m->m_len;
> > >   nip->ip_vhl = IP_VHL_BORING;
> > >   nip->ip_p = IPPROTO_ICMP;
> > > ! nip->ip_tos = 0;
> > >   icmp_reflect(m);
> > >   
> > >   freeit:
> > > --- 490,496 ----
> > >   nip->ip_len = m->m_len;
> > >   nip->ip_vhl = IP_VHL_BORING;
> > >   nip->ip_p = IPPROTO_ICMP;
> > > ! nip->ip_tos = 0x44; /* Network Management Flow */
> > >   icmp_reflect(m);
> > >   
> > >   freeit:
> > > ***************
> > > *** 610,615 ****
> > > --- 874,880 ----
> > >   struct in_addr t;
> > >   struct mbuf *opts = 0;
> > >   int optlen = (IP_VHL_HL(ip->ip_vhl) << 2) - sizeof(struct ip);
> > > + int flags = 0;
> > >   
> > >   if (!in_canforward(ip->ip_src) &&
> > >       ((ntohl(ip->ip_src.s_addr) & IN_CLASSA_NET) !=
> > > ***************
> > > *** 617,622 ****
> > > --- 882,895 ----
> > >   m_freem(m); /* Bad return address */
> > >   goto done; /* Ip_output() will check for broadcast */
> > >   }
> > > + /* Handle IPv8 TOS and UnirVerse fields */
> > > + if(((ip->ip_tos&0xF0)!=0) && ((ip->ip_tos&0x0F)!=0)){
> > > + ip->ip_tos = reverse_nibbles[ip->ip_tos];
> > > + if(ip->ip_gate != IPXX_UNIRVERSE_DEFAULT){
> > > + ip->ip_gate = reverse_nibbles[ip->ip_gate];
> > > + flags |= IP_UNIRVERSE_SET;
> > > + }
> > > + }
> > >   t = ip->ip_dst;
> > >   ip->ip_dst = ip->ip_src;
> > >   /*
> > > ***************
> > > *** 719,725 ****
> > >   (unsigned)(m->m_len - sizeof(struct ip)));
> > >   }
> > >   m->m_flags &= ~(M_BCAST|M_MCAST);
> > > ! icmp_send(m, opts);
> > >   done:
> > >   if (opts)
> > >   (void)m_free(opts);
> > > --- 992,998 ----
> > >   (unsigned)(m->m_len - sizeof(struct ip)));
> > >   }
> > >   m->m_flags &= ~(M_BCAST|M_MCAST);
> > > ! icmp_send(m,opts,flags);
> > >   done:
> > >   if (opts)
> > >   (void)m_free(opts);
> > > ***************
> > > *** 730,738 ****
> > >    * after supplying a checksum.
> > >    */
> > >   static void
> > > ! icmp_send(m, opts)
> > >   register struct mbuf *m;
> > >   struct mbuf *opts;
> > >   {
> > >   register struct ip *ip = mtod(m, struct ip *);
> > >   register int hlen;
> > > --- 1003,1012 ----
> > >    * after supplying a checksum.
> > >    */
> > >   static void
> > > ! icmp_send(m,opts,flags)
> > >   register struct mbuf *m;
> > >   struct mbuf *opts;
> > > + int flags;
> > >   {
> > >   register struct ip *ip = mtod(m, struct ip *);
> > >   register int hlen;
> > > ***************
> > > *** 757,763 ****
> > >   }
> > >   #endif
> > >   bzero(&ro, sizeof ro);
> > > ! (void) ip_output(m, opts, &ro, 0, NULL);
> > >   if (ro.ro_rt)
> > >   RTFREE(ro.ro_rt);
> > >   }
> > > --- 1031,1037 ----
> > >   }
> > >   #endif
> > >   bzero(&ro, sizeof ro);
> > > ! (void) ip_output(m, opts, &ro, flags, NULL);
> > >   if (ro.ro_rt)
> > >   RTFREE(ro.ro_rt);
> > >   }
> > > diff -c -r /unir/sys/netinet/ip_input.c netinet/ip_input.c
> > > *** /unir/sys/netinet/ip_input.c Wed Aug 29 21:41:37 2001
> > > --- netinet/ip_input.c Wed Dec 12 09:57:20 2001
> > > ***************
> > > *** 258,266 ****
> > >   maxnipq = nmbclusters / 4;
> > >   ip_maxfragpackets = nmbclusters / 4;
> > >   
> > > - #ifndef RANDOM_IP_ID
> > >   ip_id = time_second & 0xffff;
> > > ! #endif
> > >   ipintrq.ifq_maxlen = ipqmaxlen;
> > >   
> > >   register_netisr(NETISR_IP, ipintr);
> > > --- 258,275 ----
> > >   maxnipq = nmbclusters / 4;
> > >   ip_maxfragpackets = nmbclusters / 4;
> > >   
> > >   ip_id = time_second & 0xffff;
> > > ! /* initialize all the StarGate id counters */
> > > ! for(i=0; i<256; i++){
> > > ! ip_id_[i] = time_second & 0xffff;
> > > ! }
> > > ! for(i=0; i<65536; i++){
> > > ! src_gate[i] = 0x00;
> > > ! dst_gate[i] = 0x00;
> > > ! }
> > > ! galaxy_in=0;
> > > ! galaxy_out=0;
> > > ! 
> > >   ipintrq.ifq_maxlen = ipqmaxlen;
> > >   
> > >   register_netisr(NETISR_IP, ipintr);
> > > ***************
> > > *** 269,274 ****
> > > --- 278,285 ----
> > >   static struct sockaddr_in ipaddr = { sizeof(ipaddr), AF_INET };
> > >   static struct route ipforward_rt;
> > >   
> > > + extern unsigned char reverse_nibbles[];
> > > + 
> > >   /*
> > >    * Ip input routine.  Checksum and byte swap header.  If fragmented
> > >    * try to reassemble.  Process options.  Pass to next level.
> > > ***************
> > > *** 287,292 ****
> > > --- 298,305 ----
> > >   u_int32_t divert_info = 0; /* packet divert/tee info */
> > >   #endif
> > >   struct ip_fw_chain *rule = NULL;
> > > + u_int32_t src_addr;
> > > + u_int32_t dst_addr;
> > >   
> > >   #ifdef IPDIVERT
> > >   /* Get and reset firewall cookie */
> > > ***************
> > > *** 346,351 ****
> > > --- 359,365 ----
> > >   ip = mtod(m, struct ip *);
> > >   }
> > >   
> > > + 
> > >   /* 127/8 must not appear on wire - RFC1122 */
> > >   if ((ntohl(ip->ip_dst.s_addr) >> IN_CLASSA_NSHIFT) == IN_LOOPBACKNET ||
> > >       (ntohl(ip->ip_src.s_addr) >> IN_CLASSA_NSHIFT) == IN_LOOPBACKNET) {
> > > ***************
> > > *** 402,407 ****
> > > --- 416,483 ----
> > >   if (ipsec_gethist(m, NULL))
> > >   goto pass;
> > >   #endif
> > > + 
> > > + /* Process IPvXX ICMP++ packets that are special QoS codes */
> > > + if((ip->ip_p==IPPROTO_ICMP) && (((ip->ip_tos&0xF0)==0)||((ip->ip_tos&0x0F)==0))){
> > > + src_addr = ntohl(ip->ip_src.s_addr);
> > > + dst_addr = ntohl(ip->ip_dst.s_addr);
> > > + /* QoS(4)=Network Management */
> > > + switch(ip->ip_tos){
> > > + case 0x04:
> > > + /* Check for Galaxy PeaceKeeper */
> > > + /* PPPPPPPP.PPPPPPPP.GGG00000.XXXX0000 */
> > > + if((src_addr&0x1F0F)==0){
> > > + dst_gate[src_addr>>16] >>= 4;
> > > + dst_gate[src_addr>>16] |= src_addr&0xF0;
> > > + /* Check for possible new Galaxy setting */
> > > + if(((src_addr&0x0E00)!=0)&&((src_addr&0xFFFF0000)==(dst_addr&0xFFFF0000))){
> > > + galaxy_out=(src_addr&0x0E00)>>8;
> > > + log(LOG_WARNING,"Outbound Galactic Routing set to %d\n",galaxy_out);
> > > + }
> > > + else{
> > > + galaxy_out=0;
> > > + }
> > > + }
> > > + break;
> > > + case 0x40:
> > > + /* Check for Galaxy PeaceKeeper */
> > > + /* PPPPPPPP.PPPPPPPP.GGG00000.XXXX0000 */
> > > + if((src_addr&0x1F0F)==0){
> > > + src_gate[src_addr>>16] >>= 4;
> > > + src_gate[src_addr>>16] |= src_addr&0xF0;
> > > + /* Check for possible new Galaxy setting */
> > > + if(((src_addr&0x0E00)!=0)&&((src_addr&0xFFFF0000)==(dst_addr&0xFFFF0000))){
> > > + galaxy_in=(src_addr&0x0E00)>>8;
> > > + log(LOG_WARNING,"Inbound Galactic Routing set to %d\n",galaxy_in);
> > > + }
> > > + else{
> > > + galaxy_in=0;
> > > + }
> > > + }
> > > + break;
> > > + default:
> > > + log(LOG_WARNING,"Unknown ICMP+ QoS Code from %s\n",
> > > + inet_ntoa(ip->ip_src));
> > > + }
> > > + } 
> > > + /* Process IPvXX-style Packets */
> > > + if((ip->ip_off&0x8000)!=0){
> > > + /* Process non-Galaxy 0 Packets */
> > > + if(((ip->ip_p&0xC0) != 0)&&
> > > + ((ip->ip_p&0x07) != galaxy_in)){
> > > + printf("Dropped packet not from our galaxy\n");
> > > + ipstat.ips_badaddr++;
> > > + goto bad;
> > > + }
> > > + else{
> > > + /* Packet is Galaxy 0, are we ? */
> > > + if(galaxy_in != 0){
> > > + printf("Dropped packet not from our galaxy\n");
> > > + ipstat.ips_badaddr++;
> > > + goto bad;
> > > + }
> > > + }
> > > + }
> > >   
> > >   /*
> > >   * IpHack's section.
> > > diff -c -r /unir/sys/netinet/ip_mroute.c netinet/ip_mroute.c
> > > *** /unir/sys/netinet/ip_mroute.c Thu Jul 19 06:37:26 2001
> > > --- netinet/ip_mroute.c Tue Dec 11 14:00:20 2001
> > > ***************
> > > *** 1581,1590 ****
> > >        */
> > >       ip_copy = mtod(mb_copy, struct ip *);
> > >       *ip_copy = multicast_encap_iphdr;
> > >   #ifdef RANDOM_IP_ID
> > >       ip_copy->ip_id = ip_randomid();
> > >   #else
> > > !     ip_copy->ip_id = htons(ip_id++);
> > >   #endif
> > >       ip_copy->ip_len += len;
> > >       ip_copy->ip_src = vifp->v_lcl_addr;
> > > --- 1581,1597 ----
> > >        */
> > >       ip_copy = mtod(mb_copy, struct ip *);
> > >       *ip_copy = multicast_encap_iphdr;
> > > + ip_copy->ip_gate=0;
> > >   #ifdef RANDOM_IP_ID
> > >       ip_copy->ip_id = ip_randomid();
> > >   #else
> > > ! if(ip_copy->ip_tos != 0){
> > > !     ip_copy->ip_id = ip_id_[ip_copy->ip_gate]++;
> > > ! }
> > > ! else{
> > > ! ip_copy->ip_id = ip_id++;
> > > ! ip_copy->ip_gate = ip_id>>8;
> > > ! }
> > >   #endif
> > >       ip_copy->ip_len += len;
> > >       ip_copy->ip_src = vifp->v_lcl_addr;
> > > diff -c -r /unir/sys/netinet/ip_output.c netinet/ip_output.c
> > > *** /unir/sys/netinet/ip_output.c Thu Jul 19 06:37:26 2001
> > > --- netinet/ip_output.c Wed Dec 12 10:28:11 2001
> > > ***************
> > > *** 52,57 ****
> > > --- 52,58 ----
> > >   #include <sys/socket.h>
> > >   #include <sys/socketvar.h>
> > >   #include <sys/proc.h>
> > > + #include <sys/time.h>
> > >   
> > >   #include <net/if.h>
> > >   #include <net/route.h>
> > > ***************
> > > *** 88,101 ****
> > >   #include <netinet/ip_dummynet.h>
> > >   #endif
> > >   
> > > ! #ifdef IPFIREWALL_FORWARD_DEBUG
> > > ! #define print_ip(a) printf("%ld.%ld.%ld.%ld",(ntohl(a.s_addr)>>24)&0xFF,\
> > >     (ntohl(a.s_addr)>>16)&0xFF,\
> > >     (ntohl(a.s_addr)>>8)&0xFF,\
> > >     (ntohl(a.s_addr))&0xFF);
> > > - #endif
> > >   
> > >   u_short ip_id;
> > >   
> > >   static struct mbuf *ip_insertoptions __P((struct mbuf *, struct mbuf *, int *));
> > >   static struct ifnet *ip_multicast_if __P((struct in_addr *, int *));
> > > --- 89,105 ----
> > >   #include <netinet/ip_dummynet.h>
> > >   #endif
> > >   
> > > ! #define print_ip(a) printf("%ld.%ld.%ld.%ld ",(ntohl(a.s_addr)>>24)&0xFF,\
> > >     (ntohl(a.s_addr)>>16)&0xFF,\
> > >     (ntohl(a.s_addr)>>8)&0xFF,\
> > >     (ntohl(a.s_addr))&0xFF);
> > >   
> > >   u_short ip_id;
> > > + u_char ip_id_[256];
> > > + u_char src_gate[65536];
> > > + u_char dst_gate[65536];
> > > + u_char galaxy_out;
> > > + u_char galaxy_in;
> > >   
> > >   static struct mbuf *ip_insertoptions __P((struct mbuf *, struct mbuf *, int *));
> > >   static struct ifnet *ip_multicast_if __P((struct in_addr *, int *));
> > > ***************
> > > *** 127,132 ****
> > > --- 131,137 ----
> > >   int flags;
> > >   struct ip_moptions *imo;
> > >   {
> > > + struct timeval random_time;
> > >   struct ip *ip, *mhip;
> > >   struct ifnet *ifp;
> > >   struct mbuf *m = m0;
> > > ***************
> > > *** 207,219 ****
> > >   /*
> > >   * Fill in IP header.
> > >   */
> > >   if ((flags & (IP_FORWARDING|IP_RAWOUTPUT)) == 0) {
> > >   ip->ip_vhl = IP_MAKE_VHL(IPVERSION, hlen >> 2);
> > >   ip->ip_off &= IP_DF;
> > >   #ifdef RANDOM_IP_ID
> > >   ip->ip_id = ip_randomid();
> > >   #else
> > > ! ip->ip_id = htons(ip_id++);
> > >   #endif
> > >   ipstat.ips_localout++;
> > >   } else {
> > > --- 212,252 ----
> > >   /*
> > >   * Fill in IP header.
> > >   */
> > > + 
> > > + /* Set UnirVerse on QoS-agile Packets */
> > > + if(ip->ip_tos != 0){
> > > + /* Allow reflectors and forwarders to prevent setting */
> > > + if((flags & IP_UNIRVERSE_SET) == 0){
> > > + getmicrotime(&random_time);
> > > + if(random_time.tv_usec&0x01){
> > > + ip->ip_gate =
> > > + ((src_gate[(ntohl(ip->ip_src.s_addr)>>16)&0xFFFF])&0xF0) |
> > > + (((dst_gate[(ntohl(ip->ip_dst.s_addr)>>16)&0xFFFF])>>4)&0x0F);
> > > + }
> > > + else{
> > > + ip->ip_gate =
> > > + (((src_gate[(ntohl(ip->ip_src.s_addr)>>16)&0xFFFF])<<4)&0xF0) |
> > > + ((dst_gate[(ntohl(ip->ip_dst.s_addr)>>16)&0xFFFF])&0x0F);
> > > + }
> > > + }
> > > + }
> > > + else{
> > > + ip->ip_gate = IPXX_UNIRVERSE_DEFAULT;
> > > + }
> > > + /* Set id based on UnirVerse */
> > >   if ((flags & (IP_FORWARDING|IP_RAWOUTPUT)) == 0) {
> > >   ip->ip_vhl = IP_MAKE_VHL(IPVERSION, hlen >> 2);
> > >   ip->ip_off &= IP_DF;
> > >   #ifdef RANDOM_IP_ID
> > >   ip->ip_id = ip_randomid();
> > >   #else
> > > ! if(ip->ip_tos != 0){
> > > ! ip->ip_id = ip_id_[ip->ip_gate]++;
> > > ! }
> > > ! else{
> > > ! ip->ip_id = ip_id++;
> > > ! ip->ip_gate = ip_id>>8;
> > > ! }
> > >   #endif
> > >   ipstat.ips_localout++;
> > >   } else {
> > > ***************
> > > *** 431,436 ****
> > > --- 464,470 ----
> > >   }
> > >   
> > >   sendit:
> > > + 
> > >   #ifdef IPSEC
> > >   /* get SP for this packet */
> > >   if (so == NULL)
> > > diff -c -r /unir/sys/netinet/ip_var.h netinet/ip_var.h
> > > *** /unir/sys/netinet/ip_var.h Thu Jul 19 06:37:26 2001
> > > --- netinet/ip_var.h Tue Dec 11 14:00:41 2001
> > > ***************
> > > *** 133,138 ****
> > > --- 133,140 ----
> > >   /* flags passed to ip_output as last parameter */
> > >   #define IP_FORWARDING 0x1 /* most of ip header exists */
> > >   #define IP_RAWOUTPUT 0x2 /* raw ip header exists */
> > > + #define IP_UNIRVERSE_SET 0x4 /* UnirVerse set in header */
> > > + 
> > >   #define IP_ROUTETOIF SO_DONTROUTE /* bypass routing tables */
> > >   #define IP_ALLOWBROADCAST SO_BROADCAST /* can send broadcast packets */
> > >   
> > > ***************
> > > *** 142,150 ****
> > >   struct sockopt;
> > >   
> > >   extern struct ipstat ipstat;
> > > ! #ifndef RANDOM_IP_ID
> > > ! extern u_short ip_id; /* ip packet ctr, for ids */
> > > ! #endif
> > >   extern int ip_defttl; /* default IP ttl */
> > >   extern int ipforwarding; /* ip forwarding */
> > >   extern u_char ip_protox[];
> > > --- 144,157 ----
> > >   struct sockopt;
> > >   
> > >   extern struct ipstat ipstat;
> > > ! 
> > > ! extern u_short ip_id; /* ip packet ctr, for ids */
> > > ! extern u_char ip_id_[]; /* id counters for each StarGate */
> > > ! extern u_char src_gate[];
> > > ! extern u_char dst_gate[];
> > > ! extern u_char galaxy_in;
> > > ! extern u_char galaxy_out;
> > > ! 
> > >   extern int ip_defttl; /* default IP ttl */
> > >   extern int ipforwarding; /* ip forwarding */
> > >   extern u_char ip_protox[];
> > > diff -c -r /unir/sys/netinet/raw_ip.c netinet/raw_ip.c
> > > *** /unir/sys/netinet/raw_ip.c Sun Jul 29 19:32:40 2001
> > > --- netinet/raw_ip.c Tue Dec 11 14:01:10 2001
> > > ***************
> > > *** 239,249 ****
> > >   m_freem(m);
> > >   return EINVAL;
> > >   }
> > > - if (ip->ip_id == 0)
> > >   #ifdef RANDOM_IP_ID
> > >   ip->ip_id = ip_randomid();
> > >   #else
> > > ! ip->ip_id = htons(ip_id++);
> > >   #endif
> > >   /* XXX prevent ip_output from overwriting header fields */
> > >   flags |= IP_RAWOUTPUT;
> > > --- 239,259 ----
> > >   m_freem(m);
> > >   return EINVAL;
> > >   }
> > >   #ifdef RANDOM_IP_ID
> > > + if (ip->ip_id == 0){
> > >   ip->ip_id = ip_randomid();
> > > + }
> > >   #else
> > > ! if (ip->ip_id == 0){
> > > ! if(ip->ip_tos != 0){
> > > ! ip->ip_id = ip_id_[ip->ip_gate]++;
> > > ! ip->ip_gate = IPXX_UNIRVERSE_DEFAULT;
> > > ! }
> > > ! else{
> > > ! ip->ip_id = ip_id++;
> > > ! ip->ip_gate = ip_id>>8;
> > > ! }
> > > ! }
> > >   #endif
> > >   /* XXX prevent ip_output from overwriting header fields */
> > >   flags |= IP_RAWOUTPUT;
> > > 
> > 
> > 
> > 
> > To Unsubscribe: send mail to majordomo@FreeBSD.org
> > with "unsubscribe freebsd-arch" in the body of the message
> > 
> 
> 


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-arch" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?061501c18341$49f6aba0$1000a8c0>