/rc/bin/cpurc.local
% cat >/sys/lib/dist/changes/1176827406.0.txt << EOF
• Obvious.
• Russ took out the coop toggle; it's on by default now.
EOF
[geoff] --rwxrwxr-x M 64 geoff sys 367 Apr 17 12:27 rc/bin/cpurc.local
/n/sourcesdump/2007/0417/plan9/rc/bin/cpurc.local:3,14 -
/n/sourcesdump/2007/0418/plan9/rc/bin/cpurc.local:3,11
# used only by upas, as default return domain appended to all unqualified
# return addresses, even local ones
- site=plan9
+ site=EXAMPLE
# replace FILESERVER with the name of your file server
# here we start with kfs, your local disk file system
fileserver=kfs
# replace FACEDOM with the local domain to be used in the faces database
facedom=FACEDOM
-
- # turn on cooperative scheduling (assuming it starts off)
- echo coop > /dev/reboot
/rc/bin/termrc
% cat >/sys/lib/dist/changes/1176831006.0.txt << EOF
Don't start timesync if we already did so in termrc.local
EOF
[geoff] --rwxrwxr-x M 64 glenda sys 1692 Apr 17 13:27 rc/bin/termrc
/n/sourcesdump/2007/0417/plan9/rc/bin/termrc:28,34 -
/n/sourcesdump/2007/0418/plan9/rc/bin/termrc:28,35
if(test -e /net/ipifc/0/ctl)
ndb/dns -rf $NDBFILE
- aux/timesync $TIMESYNCARGS
+ if(! ps|grep -s timesync)
+ aux/timesync $TIMESYNCARGS
# bind all likely devices (#S was bound in boot)
for(i in f t m v L P U '$' Σ κ)
/sys/src/9/ip/ipv6.h
% cat >/sys/lib/dist/changes/1176838212.0.txt << EOF
• Code cleanup
• Fix up ICMP6
EOF
[geoff] --rw-rw-r-- M 64 presotto sys 4087 Apr 17 17:06 sys/src/9/ip/ipv6.h
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/ipv6.h:1,4 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/ipv6.h:1,6
- #define MIN(a, b) ((a) <= (b) ? (a) : (b))
+ #ifndef MIN
+ #define MIN(a, b) ((a) <= (b)? (a): (b))
+ #endif
/* rfc 3513 defines the address prefices */
#define isv6mcast(addr) ((addr)[0] == 0xff)
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/ipv6.h:6,52 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/ipv6.h:8,20
#define issitelocal(addr) ((addr)[0] == 0xfe && ((addr)[1] & 0xc0) == 0xc0)
#define isv6global(addr) (((addr)[0] & 0xe0) == 0x20)
- #define optexsts(np) (nhgets((np)->ploadlen) > 24)
- #define issmcast(addr) (memcmp((addr), v6solicitednode, 13) == 0)
+ #define optexsts(np) (nhgets((np)->ploadlen) > 24)
+ #define issmcast(addr) (memcmp((addr), v6solicitednode, 13) == 0)
/* from RFC 2460 */
- typedef struct Ip6hdr Ip6hdr;
- typedef struct Opthdr Opthdr;
- typedef struct Routinghdr Routinghdr;
- typedef struct Fraghdr6 Fraghdr6;
-
- struct Ip6hdr {
- uchar vcf[4]; // version:4, traffic class:8, flow label:20
- uchar ploadlen[2]; // payload length: packet length - 40
- uchar proto; // next header type
- uchar ttl; // hop limit
- uchar src[IPaddrlen];
- uchar dst[IPaddrlen];
- };
-
- struct Opthdr {
- uchar nexthdr;
- uchar len;
- };
-
- struct Routinghdr {
- uchar nexthdr;
- uchar len;
- uchar rtetype;
- uchar segrem;
- };
-
- struct Fraghdr6 {
- uchar nexthdr;
- uchar res;
- uchar offsetRM[2]; // Offset, Res, M flag
- uchar id[4];
- };
-
-
- enum { /* Header Types */
- HBH = 0, //?
+ enum { /* Header Types */
+ HBH = 0, /* hop-by-hop multicast routing protocol */
ICMP = 1,
IGMP = 2,
GGP = 3,
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/ipv6.h:71,159 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/ipv6.h:39,146
Maxhdrtype = 256,
};
-
enum {
- // multicast flgs and scop
+ /* multicast flags and scopes */
- well_known_flg = 0,
- transient_flg = 1,
+ Well_known_flg = 0,
+ Transient_flg = 1,
- node_local_scop = 1,
- link_local_scop = 2,
- site_local_scop = 5,
- org_local_scop = 8,
- global_scop = 14,
+ Node_local_scop = 1,
+ Link_local_scop = 2,
+ Site_local_scop = 5,
+ Org_local_scop = 8,
+ Global_scop = 14,
- // various prefix lengths
+ /* various prefix lengths */
+ SOLN_PREF_LEN = 13,
- SOLN_PREF_LEN = 13,
+ /* icmpv6 unreach codes */
+ icmp6_no_route = 0,
+ icmp6_ad_prohib = 1,
+ icmp6_unassigned = 2,
+ icmp6_adr_unreach = 3,
+ icmp6_port_unreach = 4,
+ icmp6_unkn_code = 5,
- // icmpv6 unreach codes
- icmp6_no_route = 0,
- icmp6_ad_prohib = 1,
- icmp6_unassigned = 2,
- icmp6_adr_unreach = 3,
- icmp6_port_unreach = 4,
- icmp6_unkn_code = 5,
+ /* various flags & constants */
+ v6MINTU = 1280,
+ HOP_LIMIT = 255,
+ ETHERHDR_LEN = 14,
+ IPV6HDR_LEN = 40,
+ IPV4HDR_LEN = 20,
- // various flags & constants
+ /* option types */
- v6MINTU = 1280,
- HOP_LIMIT = 255,
- ETHERHDR_LEN = 14,
- IPV6HDR_LEN = 40,
- IPV4HDR_LEN = 20,
+ SRC_LLADDR = 1,
+ TARGET_LLADDR = 2,
+ PREFIX_INFO = 3,
+ REDIR_HEADER = 4,
+ MTU_OPTION = 5,
- // option types
+ SRC_UNSPEC = 0,
+ SRC_UNI = 1,
+ TARG_UNI = 2,
+ TARG_MULTI = 3,
- SRC_LLADDRESS = 1,
- TARGET_LLADDRESS = 2,
- PREFIX_INFO = 3,
- REDIR_HEADER = 4,
- MTU_OPTION = 5,
+ t_unitent = 1,
+ t_uniproxy = 2,
+ t_unirany = 3,
- SRC_UNSPEC = 0,
- SRC_UNI = 1,
- TARG_UNI = 2,
- TARG_MULTI = 3,
+ /* Router constants (all times in milliseconds) */
+ MAX_INIT_RTR_ADVERT_INTVL = 16000,
+ MAX_INIT_RTR_ADVERTS = 3,
+ MAX_FINAL_RTR_ADVERTS = 3,
+ MIN_DELAY_BETWEEN_RAS = 3000,
+ MAX_RA_DELAY_TIME = 500,
- t_unitent = 1,
- t_uniproxy = 2,
- t_unirany = 3,
+ /* Host constants */
+ MAX_RTR_SOLICIT_DELAY = 1000,
+ RTR_SOLICIT_INTVL = 4000,
+ MAX_RTR_SOLICITS = 3,
- // Router constants (all times in milliseconds)
+ /* Node constants */
+ MAX_MULTICAST_SOLICIT = 3,
+ MAX_UNICAST_SOLICIT = 3,
+ MAX_ANYCAST_DELAY_TIME = 1000,
+ MAX_NEIGHBOR_ADVERT = 3,
+ REACHABLE_TIME = 30000,
+ RETRANS_TIMER = 1000,
+ DELAY_FIRST_PROBE_TIME = 5000,
+ };
- MAX_INITIAL_RTR_ADVERT_INTERVAL = 16000,
- MAX_INITIAL_RTR_ADVERTISEMENTS = 3,
- MAX_FINAL_RTR_ADVERTISEMENTS = 3,
- MIN_DELAY_BETWEEN_RAS = 3000,
- MAX_RA_DELAY_TIME = 500,
+ typedef struct Ip6hdr Ip6hdr;
+ typedef struct Opthdr Opthdr;
+ typedef struct Routinghdr Routinghdr;
+ typedef struct Fraghdr6 Fraghdr6;
- // Host constants
+ struct Ip6hdr {
+ uchar vcf[4]; /* version:4, traffic class:8, flow label:20 */
+ uchar ploadlen[2]; /* payload length: packet length - 40 */
+ uchar proto; /* next header type */
+ uchar ttl; /* hop limit */
+ uchar src[IPaddrlen];
+ uchar dst[IPaddrlen];
+ };
- MAX_RTR_SOLICITATION_DELAY = 1000,
- RTR_SOLICITATION_INTERVAL = 4000,
- MAX_RTR_SOLICITATIONS = 3,
+ struct Opthdr {
+ uchar nexthdr;
+ uchar len;
+ };
- // Node constants
+ struct Routinghdr {
+ uchar nexthdr;
+ uchar len;
+ uchar rtetype;
+ uchar segrem;
+ };
- MAX_MULTICAST_SOLICIT = 3,
- MAX_UNICAST_SOLICIT = 3,
- MAX_ANYCAST_DELAY_TIME = 1000,
- MAX_NEIGHBOR_ADVERTISEMENT = 3,
- REACHABLE_TIME = 30000,
- RETRANS_TIMER = 1000,
- DELAY_FIRST_PROBE_TIME = 5000,
-
+ struct Fraghdr6 {
+ uchar nexthdr;
+ uchar res;
+ uchar offsetRM[2]; /* Offset, Res, M flag */
+ uchar id[4];
};
- extern void ipv62smcast(uchar *, uchar *);
- extern void icmpns(Fs *f, uchar* src, int suni, uchar* targ, int tuni, uchar* mac);
- extern void icmpna(Fs *f, uchar* src, uchar* dst, uchar* targ, uchar* mac, uchar flags);
- extern void icmpttlexceeded6(Fs *f, Ipifc *ifc, Block *bp);
- extern void icmppkttoobig6(Fs *f, Ipifc *ifc, Block *bp);
- extern void icmphostunr(Fs *f, Ipifc *ifc, Block *bp, int code, int free);
-
extern uchar v6allnodesN[IPaddrlen];
extern uchar v6allnodesL[IPaddrlen];
extern uchar v6allroutersN[IPaddrlen];
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/ipv6.h:183,185 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/ipv6.h:170,179
extern int v6aLpreflen;
extern int ReTransTimer;
+
+ void ipv62smcast(uchar *, uchar *);
+ void icmpns(Fs *f, uchar* src, int suni, uchar* targ, int tuni, uchar* mac);
+ void icmpna(Fs *f, uchar* src, uchar* dst, uchar* targ, uchar* mac, uchar flags);
+ void icmpttlexceeded6(Fs *f, Ipifc *ifc, Block *bp);
+ void icmppkttoobig6(Fs *f, Ipifc *ifc, Block *bp);
+ void icmphostunr(Fs *f, Ipifc *ifc, Block *bp, int code, int free);
[geoff] --rw-rw-r-- M 64 presotto sys 17914 Apr 17 17:07 sys/src/9/ip/icmp6.c
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:1,3 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:1,6
+ /*
+ * Internet Control Message Protocol for IPv6
+ */
#include "u.h"
#include "../port/lib.h"
#include "mem.h"
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:7,47 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:10,45
#include "ip.h"
#include "ipv6.h"
- typedef struct ICMPpkt ICMPpkt;
- typedef struct IPICMP IPICMP;
- typedef struct Ndpkt Ndpkt;
- typedef struct NdiscC NdiscC;
+ enum
+ {
+ InMsgs6,
+ InErrors6,
+ OutMsgs6,
+ CsumErrs6,
+ LenErrs6,
+ HlenErrs6,
+ HoplimErrs6,
+ IcmpCodeErrs6,
+ TargetErrs6,
+ OptlenErrs6,
+ AddrmxpErrs6,
+ RouterAddrErrs6,
- struct ICMPpkt {
- uchar type;
- uchar code;
- uchar cksum[2];
- uchar icmpid[2];
- uchar seq[2];
+ Nstats6,
};
- struct IPICMP {
- Ip6hdr;
- ICMPpkt;
+ enum {
+ ICMP_USEAD6 = 40,
};
- struct NdiscC
- {
- IPICMP;
- uchar target[IPaddrlen];
+ enum {
+ Oflag = 1<<5,
+ Sflag = 1<<6,
+ Rflag = 1<<7,
};
- struct Ndpkt
- {
- NdiscC;
- uchar otype;
- uchar olen; // length in units of 8 octets(incl type, code),
- // 1 for IEEE 802 addresses
- uchar lnaddr[6]; // link-layer address
- };
-
- enum {
- // ICMPv6 types
+ enum {
+ /* ICMPv6 types */
EchoReply = 0,
UnreachableV6 = 1,
PacketTooBigV6 = 2,
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:69,74 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:67,120
Maxtype6 = 137,
};
+ typedef struct ICMPpkt ICMPpkt;
+ typedef struct IPICMP IPICMP;
+ typedef struct Ndpkt Ndpkt;
+ typedef struct NdiscC NdiscC;
+
+ struct ICMPpkt {
+ uchar type;
+ uchar code;
+ uchar cksum[2];
+ uchar icmpid[2];
+ uchar seq[2];
+ };
+
+ struct IPICMP {
+ Ip6hdr;
+ ICMPpkt;
+ };
+
+ struct NdiscC
+ {
+ IPICMP;
+ uchar target[IPaddrlen];
+ };
+
+ struct Ndpkt
+ {
+ NdiscC;
+ uchar otype;
+ uchar olen; /* length in units of 8 octets(incl type, code),
+ * 1 for IEEE 802 addresses */
+ uchar lnaddr[6]; /* link-layer address */
+ };
+
+ typedef struct Icmppriv6
+ {
+ ulong stats[Nstats6];
+
+ /* message counts */
+ ulong in[Maxtype6+1];
+ ulong out[Maxtype6+1];
+ } Icmppriv6;
+
+ typedef struct Icmpcb6
+ {
+ QLock;
+ uchar headers;
+ } Icmpcb6;
+
char *icmpnames6[Maxtype6+1] =
{
[EchoReply] "EchoReply",
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:95,118 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:141,146
[RedirectV6] "RedirectV6",
};
- enum
- {
- InMsgs6,
- InErrors6,
- OutMsgs6,
- CsumErrs6,
- LenErrs6,
- HlenErrs6,
- HoplimErrs6,
- IcmpCodeErrs6,
- TargetErrs6,
- OptlenErrs6,
- AddrmxpErrs6,
- RouterAddrErrs6,
-
- Nstats6,
- };
-
static char *statnames6[Nstats6] =
{
[InMsgs6] "InMsgs",
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:129,149 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:157,162
[RouterAddrErrs6] "RouterAddrErrs",
};
- typedef struct Icmppriv6
- {
- ulong stats[Nstats6];
-
- /* message counts */
- ulong in[Maxtype6+1];
- ulong out[Maxtype6+1];
- } Icmppriv6;
-
- typedef struct Icmpcb6
- {
- QLock;
- uchar headers;
- } Icmpcb6;
-
static char *unreachcode[] =
{
[icmp6_no_route] "no route to destination",
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:154,177 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:167,172
[icmp6_unkn_code] "icmp unreachable: unknown code",
};
- enum {
- ICMP_USEAD6 = 40,
- };
-
- enum {
- Oflag = 1<<5,
- Sflag = 1<<6,
- Rflag = 1<<7,
- };
-
- enum {
- slladd = 1,
- tlladd = 2,
- prfinfo = 3,
- redhdr = 4,
- mtuopt = 5,
- };
-
static void icmpkick6(void *x, Block *bp);
static void
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:186,195 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:181,190
{
IPICMP *p = (IPICMP *)(bp->rp);
- hnputl(p->vcf, 0); // borrow IP header as pseudoheader
+ hnputl(p->vcf, 0); /* borrow IP header as pseudoheader */
hnputs(p->ploadlen, blocklen(bp)-IPV6HDR_LEN);
p->proto = 0;
- p->ttl = ICMPv6; // ttl gets set later
+ p->ttl = ICMPv6; /* ttl gets set later */
hnputs(p->cksum, 0);
hnputs(p->cksum, ptclcsum(bp, 0, blocklen(bp)));
p->proto = ICMPv6;
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:198,204 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:193,200
static Block *
newIPICMP(int packetlen)
{
- Block *nbp;
+ Block *nbp;
+
nbp = allocb(packetlen);
nbp->wp += packetlen;
memset(nbp->rp, 0, packetlen);
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:208,224 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:204,219
void
icmpadvise6(Proto *icmp, Block *bp, char *msg)
{
- Conv **c, *s;
- IPICMP *p;
- ushort recid;
+ ushort recid;
+ Conv **c, *s;
+ IPICMP *p;
- p = (IPICMP *) bp->rp;
+ p = (IPICMP *)bp->rp;
recid = nhgets(p->icmpid);
for(c = icmp->conv; *c; c++) {
s = *c;
- if(s->lport == recid)
- if(ipcmp(s->raddr, p->dst) == 0){
+ if(s->lport == recid && ipcmp(s->raddr, p->dst) == 0){
qhangup(s->rq, msg);
qhangup(s->wq, msg);
break;
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:230,238 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:225,233
static void
icmpkick6(void *x, Block *bp)
{
+ uchar laddr[IPaddrlen], raddr[IPaddrlen];
Conv *c = x;
IPICMP *p;
- uchar laddr[IPaddrlen], raddr[IPaddrlen];
Icmppriv6 *ipriv = c->p->priv;
Icmpcb6 *icb = (Icmpcb6*)c->ptcl;
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:268,274 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:263,269
set_cksum(bp);
p->vcf[0] = 0x06 << 4;
- if(p->type <= Maxtype6)
+ if(p->type <= Maxtype6)
ipriv->out[p->type]++;
ipoput6(c->p->f, bp, 0, c->ttl, c->tos, nil);
}
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:279,290 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:274,282
Icmpcb6 *icb;
icb = (Icmpcb6*) c->ptcl;
-
- if(argc==1) {
- if(strcmp(argv[0], "headers")==0) {
- icb->headers = 6;
- return nil;
- }
+ if(argc==1 && strcmp(argv[0], "headers")==0) {
+ icb->headers = 6;
+ return nil;
}
return "unknown control request";
}
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:292,307 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:284,298
static void
goticmpkt6(Proto *icmp, Block *bp, int muxkey)
{
+ ushort recid;
+ uchar *addr;
Conv **c, *s;
IPICMP *p = (IPICMP *)bp->rp;
- ushort recid;
- uchar *addr;
if(muxkey == 0) {
recid = nhgets(p->icmpid);
addr = p->src;
- }
- else {
+ } else {
recid = muxkey;
addr = p->dst;
}
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:322,329 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:313,320
static Block *
mkechoreply6(Block *bp)
{
+ uchar addr[IPaddrlen];
IPICMP *p = (IPICMP *)(bp->rp);
- uchar addr[IPaddrlen];
ipmove(addr, p->src);
ipmove(p->src, p->dst);
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:335,361 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:326,349
/*
* sends out an ICMPv6 neighbor solicitation
- * suni == SRC_UNSPEC or SRC_UNI,
+ * suni == SRC_UNSPEC or SRC_UNI,
* tuni == TARG_MULTI => multicast for address resolution,
* and tuni == TARG_UNI => neighbor reachability.
*/
-
extern void
icmpns(Fs *f, uchar* src, int suni, uchar* targ, int tuni, uchar* mac)
{
- Block *nbp;
+ Block *nbp;
Ndpkt *np;
Proto *icmp = f->t2p[ICMPv6];
Icmppriv6 *ipriv = icmp->priv;
-
nbp = newIPICMP(sizeof(Ndpkt));
np = (Ndpkt*) nbp->rp;
-
- if(suni == SRC_UNSPEC)
+ if(suni == SRC_UNSPEC)
memmove(np->src, v6Unspecified, IPaddrlen);
- else
+ else
memmove(np->src, src, IPaddrlen);
if(tuni == TARG_UNI)
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:367,383 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:355,368
np->code = 0;
memmove(np->target, targ, IPaddrlen);
if(suni != SRC_UNSPEC) {
- np->otype = SRC_LLADDRESS;
- np->olen = 1; /* 1+1+6 = 8 = 1 8-octet */
+ np->otype = SRC_LLADDR;
+ np->olen = 1; /* 1+1+6 = 8 = 1 8-octet */
memmove(np->lnaddr, mac, sizeof(np->lnaddr));
- }
- else {
- int r = sizeof(Ndpkt)-sizeof(NdiscC);
- nbp->wp -= r;
- }
+ } else
+ nbp->wp -= sizeof(Ndpkt) - sizeof(NdiscC);
set_cksum(nbp);
- np = (Ndpkt*) nbp->rp;
+ np = (Ndpkt*)nbp->rp;
np->ttl = HOP_LIMIT;
np->vcf[0] = 0x06 << 4;
ipriv->out[NbrSolicit]++;
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:391,403 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:376,388
extern void
icmpna(Fs *f, uchar* src, uchar* dst, uchar* targ, uchar* mac, uchar flags)
{
- Block *nbp;
+ Block *nbp;
Ndpkt *np;
Proto *icmp = f->t2p[ICMPv6];
Icmppriv6 *ipriv = icmp->priv;
nbp = newIPICMP(sizeof(Ndpkt));
- np = (Ndpkt*) nbp->rp;
+ np = (Ndpkt*)nbp->rp;
memmove(np->src, src, IPaddrlen);
memmove(np->dst, dst, IPaddrlen);
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:407,414 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:392,399
np->icmpid[0] = flags;
memmove(np->target, targ, IPaddrlen);
- np->otype = TARGET_LLADDRESS;
- np->olen = 1;
+ np->otype = TARGET_LLADDR;
+ np->olen = 1;
memmove(np->lnaddr, mac, sizeof(np->lnaddr));
set_cksum(nbp);
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:423,452 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:408,438
extern void
icmphostunr(Fs *f, Ipifc *ifc, Block *bp, int code, int free)
{
- Block *nbp;
- IPICMP *np;
- Ip6hdr *p;
int osz = BLEN(bp);
int sz = MIN(sizeof(IPICMP) + osz, v6MINTU);
- Proto *icmp = f->t2p[ICMPv6];
+ Block *nbp;
+ IPICMP *np;
+ Ip6hdr *p;
+ Proto *icmp = f->t2p[ICMPv6];
Icmppriv6 *ipriv = icmp->priv;
- p = (Ip6hdr *) bp->rp;
+ p = (Ip6hdr *)bp->rp;
- if(isv6mcast(p->src))
+ if(isv6mcast(p->src))
goto clean;
nbp = newIPICMP(sz);
- np = (IPICMP *) nbp->rp;
+ np = (IPICMP *)nbp->rp;
rlock(ifc);
- if(ipv6anylocal(ifc, np->src)) {
- netlog(f, Logicmp, "send icmphostunr -> s%I d%I\n", p->src, p->dst);
- }
+ if(ipv6anylocal(ifc, np->src))
+ netlog(f, Logicmp, "send icmphostunr -> s%I d%I\n",
+ p->src, p->dst);
else {
- netlog(f, Logicmp, "icmphostunr fail -> s%I d%I\n", p->src, p->dst);
+ netlog(f, Logicmp, "icmphostunr fail -> s%I d%I\n",
+ p->src, p->dst);
freeblist(nbp);
- if(free)
+ if(free)
goto clean;
else
return;
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:476,502 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:462,489
extern void
icmpttlexceeded6(Fs *f, Ipifc *ifc, Block *bp)
{
- Block *nbp;
- IPICMP *np;
- Ip6hdr *p;
int osz = BLEN(bp);
int sz = MIN(sizeof(IPICMP) + osz, v6MINTU);
- Proto *icmp = f->t2p[ICMPv6];
+ Block *nbp;
+ IPICMP *np;
+ Ip6hdr *p;
+ Proto *icmp = f->t2p[ICMPv6];
Icmppriv6 *ipriv = icmp->priv;
- p = (Ip6hdr *) bp->rp;
+ p = (Ip6hdr *)bp->rp;
- if(isv6mcast(p->src))
+ if(isv6mcast(p->src))
return;
nbp = newIPICMP(sz);
np = (IPICMP *) nbp->rp;
- if(ipv6anylocal(ifc, np->src)) {
- netlog(f, Logicmp, "send icmpttlexceeded6 -> s%I d%I\n", p->src, p->dst);
- }
+ if(ipv6anylocal(ifc, np->src))
+ netlog(f, Logicmp, "send icmpttlexceeded6 -> s%I d%I\n",
+ p->src, p->dst);
else {
- netlog(f, Logicmp, "icmpttlexceeded6 fail -> s%I d%I\n", p->src, p->dst);
+ netlog(f, Logicmp, "icmpttlexceeded6 fail -> s%I d%I\n",
+ p->src, p->dst);
return;
}
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:514,540 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:501,528
extern void
icmppkttoobig6(Fs *f, Ipifc *ifc, Block *bp)
{
- Block *nbp;
- IPICMP *np;
- Ip6hdr *p;
int osz = BLEN(bp);
int sz = MIN(sizeof(IPICMP) + osz, v6MINTU);
- Proto *icmp = f->t2p[ICMPv6];
+ Block *nbp;
+ IPICMP *np;
+ Ip6hdr *p;
+ Proto *icmp = f->t2p[ICMPv6];
Icmppriv6 *ipriv = icmp->priv;
- p = (Ip6hdr *) bp->rp;
+ p = (Ip6hdr *)bp->rp;
- if(isv6mcast(p->src))
+ if(isv6mcast(p->src))
return;
nbp = newIPICMP(sz);
- np = (IPICMP *) nbp->rp;
+ np = (IPICMP *)nbp->rp;
- if(ipv6anylocal(ifc, np->src)) {
- netlog(f, Logicmp, "send icmppkttoobig6 -> s%I d%I\n", p->src, p->dst);
- }
+ if(ipv6anylocal(ifc, np->src))
+ netlog(f, Logicmp, "send icmppkttoobig6 -> s%I d%I\n",
+ p->src, p->dst);
else {
- netlog(f, Logicmp, "icmppkttoobig6 fail -> s%I d%I\n", p->src, p->dst);
+ netlog(f, Logicmp, "icmppkttoobig6 fail -> s%I d%I\n",
+ p->src, p->dst);
return;
}
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:554,565 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:542,554
* RFC 2461, pages 39-40, pages 57-58.
*/
static int
- valid(Proto *icmp, Ipifc *ifc, Block *bp, Icmppriv6 *ipriv) {
- int sz, osz, unsp, n, ttl, iplen;
- int pktsz = BLEN(bp);
- uchar *packet = bp->rp;
- IPICMP *p = (IPICMP *) packet;
- Ndpkt *np;
+ valid(Proto *icmp, Ipifc *ifc, Block *bp, Icmppriv6 *ipriv)
+ {
+ int sz, osz, unsp, n, ttl, iplen;
+ int pktsz = BLEN(bp);
+ uchar *packet = bp->rp;
+ IPICMP *p = (IPICMP *) packet;
+ Ndpkt *np;
USED(ifc);
n = blocklen(bp);
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:576,584 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:565,573
goto err;
}
- // Rather than construct explicit pseudoheader, overwrite IPv6 header
+ /* Rather than construct explicit pseudoheader, overwrite IPv6 header */
if(p->proto != ICMPv6) {
- // This code assumes no extension headers!!!
+ /* This code assumes no extension headers!!! */
netlog(icmp->f, Logicmp, "icmp error: extension header\n");
goto err;
}
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:595,613 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:584,599
p->ttl = ttl;
/* additional tests for some pkt types */
- if( (p->type == NbrSolicit) ||
- (p->type == NbrAdvert) ||
- (p->type == RouterAdvert) ||
- (p->type == RouterSolicit) ||
- (p->type == RedirectV6) ) {
-
+ if (p->type == NbrSolicit || p->type == NbrAdvert ||
+ p->type == RouterAdvert || p->type == RouterSolicit ||
+ p->type == RedirectV6) {
if(p->ttl != HOP_LIMIT) {
- ipriv->stats[HoplimErrs6]++;
- goto err;
+ ipriv->stats[HoplimErrs6]++;
+ goto err;
}
if(p->code != 0) {
- ipriv->stats[IcmpCodeErrs6]++;
- goto err;
+ ipriv->stats[IcmpCodeErrs6]++;
+ goto err;
}
switch (p->type) {
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:615,687 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:601,671
case NbrAdvert:
np = (Ndpkt*) p;
if(isv6mcast(np->target)) {
- ipriv->stats[TargetErrs6]++;
- goto err;
+ ipriv->stats[TargetErrs6]++;
+ goto err;
}
- if(optexsts(np) && (np->olen == 0)) {
- ipriv->stats[OptlenErrs6]++;
- goto err;
+ if(optexsts(np) && np->olen == 0) {
+ ipriv->stats[OptlenErrs6]++;
+ goto err;
}
-
- if(p->type == NbrSolicit) {
- if(ipcmp(np->src, v6Unspecified) == 0) {
- if(!issmcast(np->dst) || optexsts(np)) {
- ipriv->stats[AddrmxpErrs6]++;
+
+ if(p->type == NbrSolicit)
+ if(ipcmp(np->src, v6Unspecified) == 0)
+ if(!issmcast(np->dst) || optexsts(np)) {
+ ipriv->stats[AddrmxpErrs6]++;
goto err;
}
+
+ if(p->type == NbrAdvert)
+ if(isv6mcast(np->dst) &&
+ (nhgets(np->icmpid) & Sflag)){
+ ipriv->stats[AddrmxpErrs6]++;
+ goto err;
}
- }
-
- if(p->type == NbrAdvert) {
- if((isv6mcast(np->dst))&&(nhgets(np->icmpid) & Sflag)){
- ipriv->stats[AddrmxpErrs6]++;
- goto err;
- }
- }
break;
-
+
case RouterAdvert:
if(pktsz - sizeof(Ip6hdr) < 16) {
- ipriv->stats[HlenErrs6]++;
- goto err;
+ ipriv->stats[HlenErrs6]++;
+ goto err;
}
if(!islinklocal(p->src)) {
- ipriv->stats[RouterAddrErrs6]++;
- goto err;
+ ipriv->stats[RouterAddrErrs6]++;
+ goto err;
}
sz = sizeof(IPICMP) + 8;
- while ((sz+1) < pktsz) {
- osz = *(packet+sz+1);
+ while (sz+1 < pktsz) {
+ osz = packet[sz+1];
if(osz <= 0) {
- ipriv->stats[OptlenErrs6]++;
- goto err;
- }
+ ipriv->stats[OptlenErrs6]++;
+ goto err;
+ }
sz += 8*osz;
}
break;
-
+
case RouterSolicit:
if(pktsz - sizeof(Ip6hdr) < 8) {
- ipriv->stats[HlenErrs6]++;
- goto err;
+ ipriv->stats[HlenErrs6]++;
+ goto err;
}
unsp = (ipcmp(p->src, v6Unspecified) == 0);
sz = sizeof(IPICMP) + 8;
- while ((sz+1) < pktsz) {
- osz = *(packet+sz+1);
- if((osz <= 0) ||
- (unsp && (*(packet+sz) == slladd)) ) {
- ipriv->stats[OptlenErrs6]++;
- goto err;
+ while (sz+1 < pktsz) {
+ osz = packet[sz+1];
+ if(osz <= 0 ||
+ (unsp && packet[sz] == SRC_LLADDR)) {
+ ipriv->stats[OptlenErrs6]++;
+ goto err;
}
sz += 8*osz;
}
break;
-
+
case RedirectV6:
- //to be filled in
+ /* to be filled in */
break;
-
+
default:
goto err;
}
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:690,696 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:674,680
return 1;
err:
- ipriv->stats[InErrors6]++;
+ ipriv->stats[InErrors6]++;
return 0;
}
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:706,718 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:690,701
return t_uniproxy;
}
- for(lifc = ifc->lifc; lifc; lifc = lifc->next) {
+ for(lifc = ifc->lifc; lifc; lifc = lifc->next)
if(ipcmp(lifc->local, target) == 0) {
- t = (lifc->tentative) ? t_unitent : t_unirany;
+ t = (lifc->tentative) ? t_unitent : t_unirany;
runlock(ifc);
return t;
}
- }
runlock(ifc);
return 0;
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:721,745 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:704,725
static void
icmpiput6(Proto *icmp, Ipifc *ipifc, Block *bp)
{
- uchar *packet = bp->rp;
- IPICMP *p = (IPICMP *)packet;
- Icmppriv6 *ipriv = icmp->priv;
- Block *r;
- Proto *pr;
- char *msg, m2[128];
- Ndpkt* np;
+ int refresh = 1;
+ char *msg, m2[128];
uchar pktflags;
+ uchar *packet = bp->rp;
uchar lsrc[IPaddrlen];
- int refresh = 1;
+ Block *r;
+ IPICMP *p = (IPICMP *)packet;
+ Icmppriv6 *ipriv = icmp->priv;
Iplifc *lifc;
+ Ndpkt* np;
+ Proto *pr;
- if(!valid(icmp, ipifc, bp, ipriv))
+ if(!valid(icmp, ipifc, bp, ipriv) || p->type > Maxtype6)
goto raise;
- if(p->type <= Maxtype6)
- ipriv->in[p->type]++;
- else
- goto raise;
+ ipriv->in[p->type]++;
switch(p->type) {
case EchoRequestV6:
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:793,803 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:773,784
case RouterAdvert:
case RouterSolicit:
- /* using lsrc as a temp, munge hdr for goticmp6
- memmove(lsrc, p->src, IPaddrlen);
- memmove(p->src, p->dst, IPaddrlen);
- memmove(p->dst, lsrc, IPaddrlen); */
-
+ /* using lsrc as a temp, munge hdr for goticmp6 */
+ if (0) {
+ memmove(lsrc, p->src, IPaddrlen);
+ memmove(p->src, p->dst, IPaddrlen);
+ memmove(p->dst, lsrc, IPaddrlen);
+ }
goticmpkt6(icmp, bp, p->type);
break;
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:809,824 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:790,806
pktflags |= Oflag;
/* fall through */
- case t_uniproxy:
+ case t_uniproxy:
if(ipcmp(np->src, v6Unspecified) != 0) {
- arpenter(icmp->f, V6, np->src, np->lnaddr, 8*np->olen-2, 0);
+ arpenter(icmp->f, V6, np->src, np->lnaddr,
+ 8*np->olen-2, 0);
pktflags |= Sflag;
}
- if(ipv6local(ipifc, lsrc)) {
- icmpna(icmp->f, lsrc,
- (ipcmp(np->src, v6Unspecified)==0)?v6allnodesL:np->src,
- np->target, ipifc->mac, pktflags);
- }
+ if(ipv6local(ipifc, lsrc))
+ icmpna(icmp->f, lsrc,
+ (ipcmp(np->src, v6Unspecified) == 0?
+ v6allnodesL: np->src),
+ np->target, ipifc->mac, pktflags);
else
freeblist(bp);
break;
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:826,856 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:808,837
case t_unitent:
/* not clear what needs to be done. send up
* an icmp mesg saying don't use this address? */
-
default:
freeblist(bp);
}
-
break;
case NbrAdvert:
np = (Ndpkt*) p;
- /* if the target address matches one of the local interface
- * address and the local interface address has tentative bit set,
- * then insert into ARP table. this is so the duplication address
- * detection part of ipconfig can discover duplication through
- * the arp table
+ /*
+ * if the target address matches one of the local interface
+ * addresses and the local interface address has tentative bit
+ * set, insert into ARP table. this is so the duplicate address
+ * detection part of ipconfig can discover duplication through
+ * the arp table.
*/
lifc = iplocalonifc(ipifc, np->target);
if(lifc && lifc->tentative)
refresh = 0;
- arpenter(icmp->f, V6, np->target, np->lnaddr, 8*np->olen-2, refresh);
+ arpenter(icmp->f, V6, np->target, np->lnaddr, 8*np->olen-2,
+ refresh);
freeblist(bp);
break;
case PacketTooBigV6:
-
default:
goticmpkt6(icmp, bp, 0);
break;
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:859,865 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:840,845
raise:
freeblist(bp);
-
}
int
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:874,891 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:854,872
e = p+len;
for(i = 0; i < Nstats6; i++)
p = seprint(p, e, "%s: %lud\n", statnames6[i], priv->stats[i]);
- for(i = 0; i <= Maxtype6; i++){
+ for(i = 0; i <= Maxtype6; i++)
if(icmpnames6[i])
- p = seprint(p, e, "%s: %lud %lud\n", icmpnames6[i], priv->in[i], priv->out[i]);
+ p = seprint(p, e, "%s: %lud %lud\n", icmpnames6[i],
+ priv->in[i], priv->out[i]);
/* else
- p = seprint(p, e, "%d: %lud %lud\n", i, priv->in[i], priv->out[i]);
- */
- }
+ p = seprint(p, e, "%d: %lud %lud\n", i, priv->in[i],
+ priv->out[i]);
+ */
return p - buf;
}
- // need to import from icmp.c
+ /* import from icmp.c */
extern int icmpstate(Conv *c, char *state, int n);
extern char* icmpannounce(Conv *c, char **argv, int argc);
extern char* icmpconnect(Conv *c, char **argv, int argc);
/n/sourcesdump/2007/0417/plan9/sys/src/9/ip/icmp6.c:914,917 -
/n/sourcesdump/2007/0418/plan9/sys/src/9/ip/icmp6.c:895,897
Fsproto(fs, icmp6);
}
-
[geoff] --rw-rw-r-- M 64 presotto sys 4087 Apr 17 17:06 sys/src/9/ip/ipv6.h
/sys/src/cmd/ndb/dnresolve.c
% cat >/sys/lib/dist/changes/1176838212.1.txt << EOF
• Add better comments
• Disable code that was good in theory, but not in practice
• Reduce timeout from 60s to 30s
EOF
[geoff] --rw-rw-r-- M 64 glenda sys 30062 Apr 17 15:19 sys/src/cmd/ndb/dnresolve.c
/n/sourcesdump/2007/0417/plan9/sys/src/cmd/ndb/dnresolve.c:540,546 -
/n/sourcesdump/2007/0418/plan9/sys/src/cmd/ndb/dnresolve.c:540,549
else if (readn(fd, lenbuf, 2) != 2) {
dnslog("readnet: short read of tcp size from %I",
qp->tcpip);
- /* probably a time-out; demote the ns */
+ /*
+ * probably a time-out; demote the ns.
+ * actually, the problem may be the query, not the ns.
+ */
addslug(qp->tcpip);
} else {
len = lenbuf[0]<<8 | lenbuf[1];
/n/sourcesdump/2007/0417/plan9/sys/src/cmd/ndb/dnresolve.c:1028,1040 -
/n/sourcesdump/2007/0418/plan9/sys/src/cmd/ndb/dnresolve.c:1031,1043
}
procsetname("recursive query for %s %s", qp->dp->name,
rrname(qp->type, buf, sizeof buf));
- qunlock(&qp->dp->querylck);
+ // qunlock(&qp->dp->querylck);
queryinit(&nquery, qp->dp, qp->type, qp->req);
nquery.nsrp = tp;
rv = netquery(&nquery, depth+1);
- qlock(&qp->dp->querylck);
+ // qlock(&qp->dp->querylck);
rrfreelist(tp);
memset(&nquery, 0, sizeof nquery); /* prevent accidents */
return rv;
/n/sourcesdump/2007/0417/plan9/sys/src/cmd/ndb/dnresolve.c:1246,1253 -
/n/sourcesdump/2007/0418/plan9/sys/src/cmd/ndb/dnresolve.c:1249,1256
}
if(fd >= 0) {
qp->req->aborttime = time(nil) + (patient? Maxreqtm: Maxreqtm/2);
- /* tune; was (patient? 15: 10) */
qp->udpfd = fd;
+ /* tune; was (patient? 15: 10) */
rv = netquery1(qp, depth, ibuf, obuf, (patient? 10: 5), inns);
close(fd);
} else
/n/sourcesdump/2007/0417/plan9/sys/src/cmd/ndb/dnresolve.c:1277,1289 -
/n/sourcesdump/2007/0418/plan9/sys/src/cmd/ndb/dnresolve.c:1280,1299
*/
/* don't lock before call to slave so only children can block */
- lock = qp->req->isslave != 0;
- if(lock) {
+ if (0)
+ lock = qp->req->isslave != 0;
+ if(0 && lock) {
procsetname("query lock wait for %s", qp->dp->name);
- /* don't make concurrent queries for this name */
+ /*
+ * don't make concurrent queries for this name.
+ *
+ * this seemed like a good idea, to avoid swamping
+ * an overloaded ns, but in practice, dns processes
+ * pile up quickly and dns becomes unresponsive for a while.
+ */
qlock(&qp->dp->querylck);
- procsetname("netquery: %s", qp->dp->name);
}
+ procsetname("netquery: %s", qp->dp->name);
/* prepare server RR's for incremental lookup */
for(rp = qp->nsrp; rp; rp = rp->next)
/n/sourcesdump/2007/0417/plan9/sys/src/cmd/ndb/dnresolve.c:1323,1331 -
/n/sourcesdump/2007/0418/plan9/sys/src/cmd/ndb/dnresolve.c:1333,1340
// if (rv == 0) /* could ask /net.alt/dns directly */
// askoutdns(qp->dp, qp->type);
- if(lock) {
+ if(0 && lock)
qunlock(&qp->dp->querylck);
- }
return rv;
}
/n/sourcesdump/2007/0417/plan9/sys/src/cmd/ndb/dnresolve.c:1339,1345 -
/n/sourcesdump/2007/0418/plan9/sys/src/cmd/ndb/dnresolve.c:1348,1354
memset(&req, 0, sizeof req);
req.isslave = 1;
- req.aborttime = now + Maxreqtm*2; /* be patient */
+ req.aborttime = now + Maxreqtm;
queryinit(&query, dnlookup(root, Cin, 1), Tns, &req);
query.nsrp = dblookup(root, Cin, Tns, 0, 0);
rv = netquery(&query, 0);
/sys/src/cmd/upas/smtp/mxdial.c
% cat >/sys/lib/dist/changes/1176838212.2.txt << EOF
• Style cleanup
• Alarm if we can't resolve within 60s.
EOF
[geoff] --rw-rw-r-- M 64 glenda sys 6567 Apr 17 15:19 sys/src/cmd/upas/smtp/mxdial.c
/n/sourcesdump/2007/0417/plan9/sys/src/cmd/upas/smtp/mxdial.c:79,85 -
/n/sourcesdump/2007/0418/plan9/sys/src/cmd/upas/smtp/mxdial.c:79,85
}
/* refuse to honor loopback addresses given by dns */
- for(i = 0; i < nmx; i++){
+ for(i = 0; i < nmx; i++)
if(strcmp(mx[i].ip, "127.0.0.1") == 0){
if(debug)
fprint(2, "mxlookup returns loopback\n");
/n/sourcesdump/2007/0417/plan9/sys/src/cmd/upas/smtp/mxdial.c:86,92 -
/n/sourcesdump/2007/0418/plan9/sys/src/cmd/upas/smtp/mxdial.c:86,91
werrstr("illegal: domain lists 127.0.0.1 as mail server");
return -1;
}
- }
/* sort by preference */
if(nmx > 1)
/n/sourcesdump/2007/0417/plan9/sys/src/cmd/upas/smtp/mxdial.c:123,131 -
/n/sourcesdump/2007/0418/plan9/sys/src/cmd/upas/smtp/mxdial.c:122,130
/* just in case we find no domain name */
strcpy(domain, ds->host);
- if(ds->netdir){
+ if(ds->netdir)
n = mxlookup1(ds, domain);
- } else {
+ else {
ds->netdir = "/net";
n = mxlookup1(ds, domain);
if(n == 0) {
/n/sourcesdump/2007/0417/plan9/sys/src/cmd/upas/smtp/mxdial.c:140,149 -
/n/sourcesdump/2007/0418/plan9/sys/src/cmd/upas/smtp/mxdial.c:139,148
static int
mxlookup1(DS *ds, char *domain)
{
- char buf[1024];
- char dnsname[Maxstring];
- char *fields[4];
int i, n, fd, nmx;
+ long oalarm;
+ char buf[1024], dnsname[Maxstring];
+ char *fields[4];
snprint(dnsname, sizeof dnsname, "%s/dns", ds->netdir);
/n/sourcesdump/2007/0417/plan9/sys/src/cmd/upas/smtp/mxdial.c:152,161 -
/n/sourcesdump/2007/0418/plan9/sys/src/cmd/upas/smtp/mxdial.c:151,167
return 0;
nmx = 0;
- snprint(buf, sizeof(buf), "%s mx", ds->host);
+ snprint(buf, sizeof buf, "%s mx", ds->host);
if(debug)
fprint(2, "sending %s '%s'\n", dnsname, buf);
+ /*
+ * don't hang indefinitely in the write to /net/dns.
+ */
+ atnotify(timeout, 1);
+ oalarm = alarm(60*1000);
n = write(fd, buf, strlen(buf));
+ alarm(oalarm);
+ atnotify(timeout, 0);
if(n < 0){
rerrstr(buf, sizeof buf);
if(debug)
/n/sourcesdump/2007/0417/plan9/sys/src/cmd/upas/smtp/mxdial.c:170,176 -
/n/sourcesdump/2007/0418/plan9/sys/src/cmd/upas/smtp/mxdial.c:176,182
* get any mx entries
*/
seek(fd, 0, 0);
- while(nmx < Nmx && (n = read(fd, buf, sizeof(buf)-1)) > 0){
+ while(nmx < Nmx && (n = read(fd, buf, sizeof buf-1)) > 0){
buf[n] = 0;
if(debug)
fprint(2, "dns mx: %s\n", buf);
/n/sourcesdump/2007/0417/plan9/sys/src/cmd/upas/smtp/mxdial.c:227,233 -
/n/sourcesdump/2007/0418/plan9/sys/src/cmd/upas/smtp/mxdial.c:233,239
mx[i] = mx[nmx];
i--;
}
- return nmx;
+ return nmx;
}
static int
/n/sourcesdump/2007/0417/plan9/sys/src/cmd/upas/smtp/mxdial.c:291,297 -
/n/sourcesdump/2007/0418/plan9/sys/src/cmd/upas/smtp/mxdial.c:297,303
return;
}
- snprint(buf, sizeof(buf), "!ipinfo %s", ds->host+1); // +1 to skip $
+ snprint(buf, sizeof buf, "!ipinfo %s", ds->host+1); // +1 to skip $
if(write(fd, buf, strlen(buf)) <= 0){
if(debug)
fprint(2, "write %s: %r\n", cs);
|