/* asvcsend.c */ /* Test program for sending data over an native atm SVC */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include char buf[256]; int main(int argc,char **argv) { int s; int sel; int result; struct atm_qos qos; struct atm_sap sap; struct sockaddr_atmsvc addr,to_addr; int pcr,size; int amt; char dir[ATM_ESA_LEN+1]; if (argc < 3) { printf("Usage: asvcsend dest-host-name pcr selector \n"); exit(1); } s=socket(PF_ATMSVC,SOCK_DGRAM,ATM_AAL5); if (s < 0) { printf("socket: \"%s\"",strerror(errno)); exit(-1); } memset(&qos,0,sizeof(qos)); qos.txtp.traffic_class=ATM_UBR; pcr=atoi(argv[2]); qos.txtp.min_pcr=0; qos.txtp.max_pcr=pcr; qos.txtp.max_sdu=8192; qos.txtp.max_cdv=0; qos.aal=ATM_AAL5; qos.rxtp.traffic_class=ATM_NONE; if (setsockopt (s,SOL_ATM,SO_ATMQOS,&qos,sizeof(qos))<0) { printf("setsockopt ATMQOS: \"%s\"",strerror(errno)); close(s); exit(-1); } memset(&sap,0,sizeof(sap)); sap.blli[0].l2_proto = ATM_L2_ISO8802; sap.blli[0].l3_proto = ATM_L3_NONE; if ((result = setsockopt(s,SOL_ATM, SO_ATMSAP, &sap,sizeof(sap))) < 0) { printf("setsockopt ATMSAP: \"%s\"",strerror(errno)); close(s); exit(-1); } memset(&to_addr,0,sizeof(to_addr)); result=text2atm(argv[1], (struct sockaddr *) &to_addr, sizeof(to_addr),T2A_SVC|T2A_NAME); if (result==-1) { printf("text2atm: \"%s\"",strerror(errno)); close(s); exit(-1); } if (argc > 3) { char c; c = atoi(argv[3]); to_addr.sas_addr.prv[19] = c; } else { to_addr.sas_addr.prv[19] = 5; } to_addr.sas_family = AF_ATMSVC; result = connect(s, (struct sockaddr *)&to_addr, sizeof(to_addr)); if (result<0) { printf("connect: \"%s\"",strerror(errno)); close(s); exit(-1); } #if 1 size=sizeof(addr); result= getpeername(s, (struct sockaddr *)&addr, &size); if (result < 0) { printf("getpeername: \"%s\"",strerror(errno)); close(s); exit(-1); } sel = addr.sas_addr.prv[19]; addr.sas_addr.prv[19] = 0; result = atm2text(dir, (ATM_ESA_LEN+1), (struct sockaddr *)&addr,A2T_NAME); if (result < 0) { printf("Couldn't get remote host name \n"); } else { printf("Connected ok to host %s at selector %d \n", dir, sel); } size=sizeof(qos); if ((result = getsockopt(s,SOL_ATM,SO_ATMQOS,&qos,&size)) < 0) { printf("getsockopt: \"%s\"",strerror(errno)); close(s); exit(-1); } printf("Traffic parameters:%d,%d,%d\n", qos.txtp.max_pcr,qos.txtp.min_pcr,qos.txtp.max_sdu); #endif while ((amt = read(0, buf, 256)) > 0) write(s, buf, amt); exit(0); }