diff -ur --new-file old/atm/CHANGES new/atm/CHANGES --- old/atm/CHANGES Mon Nov 22 19:21:04 1999 +++ new/atm/CHANGES Wed Dec 1 02:07:13 1999 @@ -1,3 +1,40 @@ +Version 0.63 to 0.64 (1-DEC-1999) +==================== + +Bug fixes +--------- + + - atmapi.h logic was still wrong (fixed by Christophe Lizzi) + - LANE: fixed BUS filtering and net/atm/lec.c cleanup (by Heikki Vatiainen) + - arpd/io.c assumed that diag() preserves errno + - atmarpd didn't include QOS in output if getsockopt failed + +New features +------------ + + - /proc/atm/eni:* now also shows transmit queue and backlog length + - added option "sndbuf" to atmarp + - added option "sndbuf" to tc ... atm ... + - /proc/atm/vc lists internal details for all VCs (flags, buffers, etc.); + added ATM_VF2TXT_MAP to atmdev.h to allow translation of flag values + +Other changes +------------- + + - ATM now uses sk->sndbuf/rvcbuf instead of atm_vcc->tx_quota/rx_quota + - removed rx_quota hack from zatm.c + - removed net/atm/tunable.h + - CLIP and sch_atm now only send packets if the VC's send queue allows them to + - implemented correct "requeue" function in sch_atm + - updated zeppelin(8) man page (Heikki Vatiainen) + - atmarp: atmarp -q qos_spec usage is obsolete; use atmarp -q qos qos_spec + instead + - /proc/atm/svc now prints "N/A@xxxxxxxx" instead of "Unassigned", with the + address of the descriptor in xxxxxxxx + - removed all traces of CONFIG_MMU_HACKS + - obsoleted ATM_SETSC (single-copy control) + + Version 0.62 to 0.63 (22-NOV-1999) ==================== diff -ur --new-file old/atm/README new/atm/README --- old/atm/README Fri Nov 19 13:19:51 1999 +++ new/atm/README Tue Nov 30 22:28:57 1999 @@ -1,4 +1,4 @@ -ATM on Linux, release 0.63 (beta) by Werner Almesberger, EPFL ICA +ATM on Linux, release 0.64 (beta) by Werner Almesberger, EPFL ICA ============================================== Werner.Almesberger@epfl.ch This is experimental software. There are known bugs and certainly even diff -ur --new-file old/atm/USAGE new/atm/USAGE --- old/atm/USAGE Fri Nov 19 20:10:14 1999 +++ new/atm/USAGE Wed Dec 1 02:08:36 1999 @@ -1,4 +1,4 @@ -%:Usage instructions - ATM on Linux, release 0.63 +%:Usage instructions - ATM on Linux, release 0.64 %:------------------------------------------------- %: %: @@ -20,7 +20,7 @@ In order to install this package, you need - the package itself - ftp://lrcftp.epfl.ch/pub/linux/atm/dist/atm-0.63.tar.gz + ftp://lrcftp.epfl.ch/pub/linux/atm/dist/atm-0.64.tar.gz - the Linux kernel, version 2.3.28, e.g. from ftp://ftp.kernel.org/pub/linux/kernel/v2.3/linux-2.3.28.tar.gz - Perl, version 4 or 5 @@ -36,7 +36,7 @@ all the files listed above there. Then extract the ATM on Linux distribution: -tar xfz atm-0.63.tar.gz +tar xfz atm-0.64.tar.gz and the kernel source: diff -ur --new-file old/atm/VERSION new/atm/VERSION --- old/atm/VERSION Mon Nov 22 19:29:13 1999 +++ new/atm/VERSION Tue Nov 30 22:29:01 1999 @@ -1 +1 @@ -0.63 +0.64 diff -ur --new-file old/atm/arpd/arp.c new/atm/arpd/arp.c --- old/atm/arpd/arp.c Wed Sep 23 20:16:11 1998 +++ new/atm/arpd/arp.c Tue Nov 30 22:02:42 1999 @@ -1,6 +1,6 @@ /* arp.c - ARP state machine */ -/* Written 1995-1998 by Werner Almesberger, EPFL-LRC/ICA */ +/* Written 1995-1999 by Werner Almesberger, EPFL-LRC/ICA */ #include @@ -118,7 +118,8 @@ if (!vcc->connecting) return 1; if (itf->arp_srv->vccs) return 0; if ((fd = connect_vcc((struct sockaddr *) itf->arp_srv->addr, - &itf->arp_srv->qos,CLIP_DEFAULT_IDLETIMER)) < 0) return 0; + &itf->arp_srv->qos,itf->arp_srv->sndbuf,CLIP_DEFAULT_IDLETIMER)) < 0) + return 0; vcc = alloc_t(VCC); vcc->active = 1; vcc->connecting = 1; @@ -430,7 +431,7 @@ assert(entry->addr->sas_family == AF_ATMSVC); if ((fd = connect_vcc((struct sockaddr *) entry->addr,&entry->qos, - CLIP_DEFAULT_IDLETIMER)) < 0) return; + entry->sndbuf,CLIP_DEFAULT_IDLETIMER)) < 0) return; vcc = alloc_t(VCC); vcc->active = 1; vcc->connecting = 1; @@ -490,6 +491,7 @@ free(vcc->entry); vcc->entry = entry; Q_INSERT_HEAD(entry->vccs,vcc); + set_sndbuf(vcc); entry->flags &= ~ATF_NOVC; assert(!vcc->connecting); if (set_ip(vcc->fd,ip) < 0) @@ -502,7 +504,11 @@ if (!entry) if (vcc) { entry = vcc->entry; - if (!entry->itf) Q_REMOVE(unknown_incoming,entry); + if (!entry->itf) { + Q_REMOVE(unknown_incoming,entry); + entry->sndbuf = itf->sndbuf; + set_sndbuf(vcc); + } else if (entry->ip && entry->ip != ip && (entry->flags & ATF_PERM) && !(entry->flags & ATF_ARPSRV)) { diag(COMPONENT,DIAG_ERROR,"ignoring attempt to change IP " @@ -554,6 +560,7 @@ Q_REMOVE(unknown_incoming,incoming); incoming->vccs->entry = entry; Q_INSERT_HEAD(entry->vccs,incoming->vccs); + set_sndbuf(incoming->vccs); free(incoming); } } @@ -824,14 +831,15 @@ static int ioctl_set_pvc(ITF *itf,uint32_t ip,struct sockaddr_atmpvc *addr, - const struct atm_qos *qos,int flags) + const struct atm_qos *qos,int sndbuf,int flags) { ENTRY *entry; VCC *vcc; int fd,result; if (lookup_ip(itf,ip)) return -EEXIST; - if ((fd = connect_vcc((struct sockaddr *) addr,qos,0)) < 0) return fd; + if ((fd = connect_vcc((struct sockaddr *) addr,qos,sndbuf,0)) < 0) + return fd; if ((result = set_ip(fd,ip)) < 0) return result; if (flags & ATF_NULL) { if ((result = set_encap(fd,0)) < 0) return result; @@ -841,6 +849,7 @@ entry->state = as_valid; entry->ip = ip; entry->qos = *qos; + entry->sndbuf = sndbuf; entry->flags = flags; entry->itf = itf; vcc = alloc_t(VCC); @@ -856,7 +865,7 @@ static int ioctl_set_svc(ITF *itf,uint32_t ip,struct sockaddr_atmsvc *addr, - const struct atm_qos *qos,int flags) + const struct atm_qos *qos,int sndbuf,int flags) { ENTRY *entry; @@ -868,6 +877,7 @@ entry->addr = alloc_t(struct sockaddr_atmsvc); *entry->addr = *addr; entry->qos = *qos; + entry->sndbuf = sndbuf; entry->flags = flags; if (!(flags & ATF_PERM) || (flags & ATF_ARPSRV)) if (itf->arp_srv) START_TIMER(entry,CREVAL); @@ -914,6 +924,12 @@ } +static int qos_present(const struct atm_qos *qos) +{ + return qos->txtp.traffic_class || qos->rxtp.traffic_class; +} + + int arp_ioctl(struct atmarp_req *req) { ITF *itf; @@ -929,7 +945,8 @@ switch (req->type) { case art_qos: diag(COMPONENT,DIAG_DEBUG,"got art_qos for itf %d",itf->number); - itf->qos = req->qos; + if (qos_present(&req->qos)) itf->qos = req->qos; + if (req->sndbuf) itf->sndbuf = req->sndbuf; return 0; case art_set: if (atm2text(buffer,MAX_ATM_ADDR_LEN+1, @@ -940,19 +957,19 @@ diag(COMPONENT,DIAG_DEBUG,"got art_set for itf %d, IP %d.%d.%d.%d" ", ATM %s, flags 0x%x",itf->number,ipp[0],ipp[1],ipp[2],ipp[3], buffer,req->flags); - if (!req->qos.txtp.traffic_class && !req->qos.rxtp.traffic_class) - req->qos = itf->qos; + if (!qos_present(&req->qos)) req->qos = itf->qos; + if (!req->sndbuf) req->sndbuf = itf->sndbuf; switch (req->addr.sas_family) { case AF_ATMPVC: adjust_qos(itf,&req->qos,req->flags & ATF_NULL); return ioctl_set_pvc(itf,req->ip, (struct sockaddr_atmpvc *) &req->addr,&req->qos, - req->flags); + req->sndbuf,req->flags); case AF_ATMSVC: adjust_qos(itf,&req->qos,0); return ioctl_set_svc(itf,req->ip, (struct sockaddr_atmsvc *) &req->addr,&req->qos, - req->flags); + req->sndbuf,req->flags); default: /* not reached - atm2text complains before */ diag(COMPONENT,DIAG_ERROR,"art_set: bad HA AF 0x%x", req->addr.sas_family); diff -ur --new-file old/atm/arpd/atmarp.8 new/atm/arpd/atmarp.8 --- old/atm/arpd/atmarp.8 Sat Apr 11 12:43:50 1998 +++ new/atm/arpd/atmarp.8 Tue Nov 30 22:55:45 1999 @@ -1,4 +1,4 @@ -.TH ATMARP 8 "Oct 10, 1996" "Linux" "Maintenance Commands" +.TH ATMARP 8 "Nov 30, 1999" "Linux" "Maintenance Commands" .SH NAME atmarp \- administer classical IP over ATM connections .SH SYNOPSIS @@ -1 .