Lines Matching +full:- +full:p

11  * me to include this copyright-stuff instead of placing this in the
146 physical_SetDescriptor(struct physical *p) in physical_SetDescriptor() argument
148 p->desc.type = PHYSICAL_DESCRIPTOR; in physical_SetDescriptor()
149 p->desc.UpdateSet = physical_UpdateSet; in physical_SetDescriptor()
150 p->desc.IsSet = physical_IsSet; in physical_SetDescriptor()
151 p->desc.Read = physical_DescriptorRead; in physical_SetDescriptor()
152 p->desc.Write = physical_DescriptorWrite; in physical_SetDescriptor()
158 struct physical *p; in physical_Create() local
160 p = (struct physical *)malloc(sizeof(struct physical)); in physical_Create()
161 if (!p) in physical_Create()
164 p->link.type = PHYSICAL_LINK; in physical_Create()
165 p->link.name = dl->name; in physical_Create()
166 p->link.len = sizeof *p; in physical_Create()
168 /* The sample period is fixed - see physical2iov() & iov2physical() */ in physical_Create()
169 throughput_init(&p->link.stats.total, SAMPLE_PERIOD); in physical_Create()
170 p->link.stats.parent = dl->bundle->ncp.mp.active ? in physical_Create()
171 &dl->bundle->ncp.mp.link.stats.total : NULL; in physical_Create()
172 p->link.stats.gather = 1; in physical_Create()
174 memset(p->link.Queue, '\0', sizeof p->link.Queue); in physical_Create()
175 memset(p->link.proto_in, '\0', sizeof p->link.proto_in); in physical_Create()
176 memset(p->link.proto_out, '\0', sizeof p->link.proto_out); in physical_Create()
177 link_EmptyStack(&p->link); in physical_Create()
179 p->handler = NULL; in physical_Create()
180 physical_SetDescriptor(p); in physical_Create()
181 p->type = type; in physical_Create()
183 hdlc_Init(&p->hdlc, &p->link.lcp); in physical_Create()
184 async_Init(&p->async); in physical_Create()
186 p->fd = -1; in physical_Create()
187 p->out = NULL; in physical_Create()
188 p->connect_count = 0; in physical_Create()
189 p->dl = dl; in physical_Create()
190 p->input.sz = 0; in physical_Create()
191 *p->name.full = '\0'; in physical_Create()
192 p->name.base = p->name.full; in physical_Create()
194 p->Utmp = 0; in physical_Create()
195 p->session_owner = (pid_t)-1; in physical_Create()
197 p->cfg.rts_cts = MODEM_CTSRTS; in physical_Create()
198 p->cfg.speed = MODEM_SPEED; in physical_Create()
199 p->cfg.parity = CS8; in physical_Create()
200 memcpy(p->cfg.devlist, MODEM_LIST, sizeof MODEM_LIST); in physical_Create()
201 p->cfg.ndev = NMODEMS; in physical_Create()
202 p->cfg.cd.necessity = CD_DEFAULT; in physical_Create()
203 p->cfg.cd.delay = 0; /* reconfigured or device specific default */ in physical_Create()
205 lcp_Init(&p->link.lcp, dl->bundle, &p->link, &dl->fsmp); in physical_Create()
206 ccp_Init(&p->link.ccp, dl->bundle, &p->link, &dl->fsmp); in physical_Create()
208 return p; in physical_Create()
227 for (pp = validparity; pp->name; pp++) { in GetParityValue()
228 if (strcasecmp(pp->name, str) == 0 || in GetParityValue()
229 strcasecmp(pp->name1, str) == 0) { in GetParityValue()
230 return pp->set; in GetParityValue()
233 return (-1); in GetParityValue()
237 physical_SetParity(struct physical *p, const char *str) in physical_SetParity() argument
244 p->cfg.parity = val; in physical_SetParity()
245 if (p->fd >= 0) { in physical_SetParity()
246 tcgetattr(p->fd, &rstio); in physical_SetParity()
249 tcsetattr(p->fd, TCSADRAIN, &rstio); in physical_SetParity()
253 log_Printf(LogWARN, "%s: %s: Invalid parity\n", p->link.name, str); in physical_SetParity()
254 return -1; in physical_SetParity()
258 physical_GetSpeed(struct physical *p) in physical_GetSpeed() argument
260 if (p->handler && p->handler->speed) in physical_GetSpeed()
261 return (*p->handler->speed)(p); in physical_GetSpeed()
267 physical_SetSpeed(struct physical *p, unsigned speed) in physical_SetSpeed() argument
270 p->cfg.speed = speed; in physical_SetSpeed()
278 physical_Raw(struct physical *p) in physical_Raw() argument
280 if (p->handler && p->handler->raw) in physical_Raw()
281 return (*p->handler->raw)(p); in physical_Raw()
287 physical_Offline(struct physical *p) in physical_Offline() argument
289 if (p->handler && p->handler->offline) in physical_Offline()
290 (*p->handler->offline)(p); in physical_Offline()
291 log_Printf(LogPHASE, "%s: Disconnected!\n", p->link.name); in physical_Offline()
295 physical_Lock(struct physical *p) in physical_Lock() argument
299 if (*p->name.full == '/' && p->type != PHYS_DIRECT && in physical_Lock()
300 (res = ID0uu_lock(p->name.base)) != UU_LOCK_OK) { in physical_Lock()
302 log_Printf(LogPHASE, "%s: %s is in use\n", p->link.name, p->name.full); in physical_Lock()
305 p->link.name, p->name.full, uu_lockerr(res)); in physical_Lock()
313 physical_Unlock(struct physical *p) in physical_Unlock() argument
315 if (*p->name.full == '/' && p->type != PHYS_DIRECT && in physical_Unlock()
316 ID0uu_unlock(p->name.base) == -1) in physical_Unlock()
317 log_Printf(LogALERT, "%s: Can't uu_unlock %s\n", p->link.name, in physical_Unlock()
318 p->name.base); in physical_Unlock()
322 physical_Close(struct physical *p) in physical_Close() argument
328 if (p->fd < 0) in physical_Close()
331 log_Printf(LogDEBUG, "%s: Close\n", p->link.name); in physical_Close()
333 if (p->handler && p->handler->cooked) in physical_Close()
334 (*p->handler->cooked)(p); in physical_Close()
336 physical_StopDeviceTimer(p); in physical_Close()
337 if (p->Utmp) { in physical_Close()
343 p->Utmp = 0; in physical_Close()
345 newsid = tcgetpgrp(p->fd) == getpgrp(); in physical_Close()
346 close(p->fd); in physical_Close()
347 p->fd = -1; in physical_Close()
348 log_SetTtyCommandMode(p->dl); in physical_Close()
350 throughput_stop(&p->link.stats.total); in physical_Close()
351 throughput_log(&p->link.stats.total, LogPHASE, p->link.name); in physical_Close()
353 if (p->session_owner != (pid_t)-1) { in physical_Close()
354 log_Printf(LogPHASE, "%s: HUPing %ld\n", p->link.name, in physical_Close()
355 (long)p->session_owner); in physical_Close()
356 ID0kill(p->session_owner, SIGHUP); in physical_Close()
357 p->session_owner = (pid_t)-1; in physical_Close()
361 bundle_setsid(p->dl->bundle, 0); in physical_Close()
363 if (*p->name.full == '/') { in physical_Close()
364 snprintf(fn, sizeof fn, "%s%s.if", _PATH_VARRUN, p->name.base); in physical_Close()
365 if (ID0unlink(fn) == -1) in physical_Close()
367 p->link.name, fn, strerror(errno)); in physical_Close()
369 physical_Unlock(p); in physical_Close()
370 if (p->handler && p->handler->destroy) in physical_Close()
371 (*p->handler->destroy)(p); in physical_Close()
372 p->handler = NULL; in physical_Close()
373 p->name.base = p->name.full; in physical_Close()
374 *p->name.full = '\0'; in physical_Close()
378 physical_Destroy(struct physical *p) in physical_Destroy() argument
380 physical_Close(p); in physical_Destroy()
381 throughput_destroy(&p->link.stats.total); in physical_Destroy()
382 free(p); in physical_Destroy()
389 struct physical *p = descriptor2physical(d); in physical_DescriptorWrite() local
392 if (p->out == NULL) in physical_DescriptorWrite()
393 p->out = link_Dequeue(&p->link); in physical_DescriptorWrite()
395 if (p->out) { in physical_DescriptorWrite()
396 nw = physical_Write(p, MBUF_CTOP(p->out), p->out->m_len); in physical_DescriptorWrite()
398 p->link.name, nw, (unsigned long)p->out->m_len, p->fd); in physical_DescriptorWrite()
400 p->out->m_len -= nw; in physical_DescriptorWrite()
401 p->out->m_offset += nw; in physical_DescriptorWrite()
402 if (p->out->m_len == 0) in physical_DescriptorWrite()
403 p->out = m_free(p->out); in physical_DescriptorWrite()
409 log_Printf(LogPHASE, "%s: write (fd %d, len %zd): %s\n", p->link.name, in physical_DescriptorWrite()
410 p->fd, p->out->m_len, strerror(errno)); in physical_DescriptorWrite()
411 datalink_Down(p->dl, CLOSE_NORMAL); in physical_DescriptorWrite()
423 struct physical *p = arg->cx->physical; in physical_ShowStatus() local
428 prompt_Printf(arg->prompt, "Name: %s\n", p->link.name); in physical_ShowStatus()
429 prompt_Printf(arg->prompt, " State: "); in physical_ShowStatus()
430 if (p->fd < 0) in physical_ShowStatus()
431 prompt_Printf(arg->prompt, "closed\n"); in physical_ShowStatus()
433 slot = physical_Slot(p); in physical_ShowStatus()
434 if (p->handler && p->handler->openinfo) { in physical_ShowStatus()
435 if (slot == -1) in physical_ShowStatus()
436 prompt_Printf(arg->prompt, "open (%s)\n", (*p->handler->openinfo)(p)); in physical_ShowStatus()
438 prompt_Printf(arg->prompt, "open (%s, port %d)\n", in physical_ShowStatus()
439 (*p->handler->openinfo)(p), slot); in physical_ShowStatus()
440 } else if (slot == -1) in physical_ShowStatus()
441 prompt_Printf(arg->prompt, "open\n"); in physical_ShowStatus()
443 prompt_Printf(arg->prompt, "open (port %d)\n", slot); in physical_ShowStatus()
446 prompt_Printf(arg->prompt, " Device: %s", in physical_ShowStatus()
447 *p->name.full ? p->name.full : in physical_ShowStatus()
448 p->type == PHYS_DIRECT ? "unknown" : "N/A"); in physical_ShowStatus()
449 if (p->session_owner != (pid_t)-1) in physical_ShowStatus()
450 prompt_Printf(arg->prompt, " (session owner: %ld)", (long)p->session_owner); in physical_ShowStatus()
452 prompt_Printf(arg->prompt, "\n Link Type: %s\n", mode2Nam(p->type)); in physical_ShowStatus()
453 prompt_Printf(arg->prompt, " Connect Count: %d\n", p->connect_count); in physical_ShowStatus()
455 if (p->fd >= 0 && ioctl(p->fd, TIOCOUTQ, &n) >= 0) in physical_ShowStatus()
456 prompt_Printf(arg->prompt, " Physical outq: %d\n", n); in physical_ShowStatus()
459 prompt_Printf(arg->prompt, " Queued Packets: %lu\n", in physical_ShowStatus()
460 (u_long)link_QueueLen(&p->link)); in physical_ShowStatus()
461 prompt_Printf(arg->prompt, " Phone Number: %s\n", arg->cx->phone.chosen); in physical_ShowStatus()
463 prompt_Printf(arg->prompt, "\nDefaults:\n"); in physical_ShowStatus()
465 prompt_Printf(arg->prompt, " Device List: "); in physical_ShowStatus()
466 dev = p->cfg.devlist; in physical_ShowStatus()
467 for (n = 0; n < p->cfg.ndev; n++) { in physical_ShowStatus()
469 prompt_Printf(arg->prompt, ", "); in physical_ShowStatus()
470 prompt_Printf(arg->prompt, "\"%s\"", dev); in physical_ShowStatus()
474 prompt_Printf(arg->prompt, "\n Characteristics: "); in physical_ShowStatus()
475 if (physical_IsSync(arg->cx->physical)) in physical_ShowStatus()
476 prompt_Printf(arg->prompt, "sync"); in physical_ShowStatus()
478 prompt_Printf(arg->prompt, "%dbps", p->cfg.speed); in physical_ShowStatus()
480 switch (p->cfg.parity & CSIZE) { in physical_ShowStatus()
482 prompt_Printf(arg->prompt, ", cs7"); in physical_ShowStatus()
485 prompt_Printf(arg->prompt, ", cs8"); in physical_ShowStatus()
488 if (p->cfg.parity & PARENB) { in physical_ShowStatus()
489 if (p->cfg.parity & PARODD) in physical_ShowStatus()
490 prompt_Printf(arg->prompt, ", odd parity"); in physical_ShowStatus()
492 prompt_Printf(arg->prompt, ", even parity"); in physical_ShowStatus()
494 prompt_Printf(arg->prompt, ", no parity"); in physical_ShowStatus()
496 prompt_Printf(arg->prompt, ", CTS/RTS %s\n", (p->cfg.rts_cts ? "on" : "off")); in physical_ShowStatus()
498 prompt_Printf(arg->prompt, " CD check delay: "); in physical_ShowStatus()
499 cd = p->handler ? &p->handler->cd : &p->cfg.cd; in physical_ShowStatus()
500 if (cd->necessity == CD_NOTREQUIRED) in physical_ShowStatus()
501 prompt_Printf(arg->prompt, "no cd"); in physical_ShowStatus()
502 else if (p->cfg.cd.necessity == CD_DEFAULT) { in physical_ShowStatus()
503 prompt_Printf(arg->prompt, "device specific"); in physical_ShowStatus()
505 prompt_Printf(arg->prompt, "%d second%s", p->cfg.cd.delay, in physical_ShowStatus()
506 p->cfg.cd.delay == 1 ? "" : "s"); in physical_ShowStatus()
507 if (p->cfg.cd.necessity == CD_REQUIRED) in physical_ShowStatus()
508 prompt_Printf(arg->prompt, " (required!)"); in physical_ShowStatus()
510 prompt_Printf(arg->prompt, "\n\n"); in physical_ShowStatus()
512 throughput_disp(&p->link.stats.total, arg->prompt); in physical_ShowStatus()
521 struct physical *p = descriptor2physical(d); in physical_DescriptorRead() local
525 rbuff = p->input.buf + p->input.sz; in physical_DescriptorRead()
528 n = physical_Read(p, rbuff, sizeof p->input.buf - p->input.sz); in physical_DescriptorRead()
530 p->link.name, n, (int)(sizeof p->input.buf - p->input.sz), p->fd); in physical_DescriptorRead()
533 log_Printf(LogPHASE, "%s: read (%d): %s\n", p->link.name, p->fd, in physical_DescriptorRead()
537 p->link.name, p->fd); in physical_DescriptorRead()
538 datalink_Down(p->dl, CLOSE_NORMAL); in physical_DescriptorRead()
542 rbuff -= p->input.sz; in physical_DescriptorRead()
543 n += p->input.sz; in physical_DescriptorRead()
545 if (p->link.lcp.fsm.state <= ST_CLOSED) { in physical_DescriptorRead()
546 if (p->type != PHYS_DEDICATED) { in physical_DescriptorRead()
547 found = hdlc_Detect((u_char const **)&rbuff, n, physical_IsSync(p)); in physical_DescriptorRead()
548 if (rbuff != p->input.buf) in physical_DescriptorRead()
549 log_WritePrompts(p->dl, "%.*s", (int)(rbuff - p->input.buf), in physical_DescriptorRead()
550 p->input.buf); in physical_DescriptorRead()
551 p->input.sz = n - (rbuff - p->input.buf); in physical_DescriptorRead()
556 p->link.name); in physical_DescriptorRead()
557 log_SetTtyCommandMode(p->dl); in physical_DescriptorRead()
558 datalink_Up(p->dl, 0, 1); in physical_DescriptorRead()
559 link_PullPacket(&p->link, rbuff, p->input.sz, bundle); in physical_DescriptorRead()
560 p->input.sz = 0; in physical_DescriptorRead()
562 bcopy(rbuff, p->input.buf, p->input.sz); in physical_DescriptorRead()
564 /* In -dedicated mode, we just discard input until LCP is started */ in physical_DescriptorRead()
565 p->input.sz = 0; in physical_DescriptorRead()
567 link_PullPacket(&p->link, rbuff, n, bundle); in physical_DescriptorRead()
574 struct physical *p; in iov2physical() local
578 p = (struct physical *)iov[(*niov)++].iov_base; in iov2physical()
579 p->link.name = dl->name; in iov2physical()
580 memset(p->link.Queue, '\0', sizeof p->link.Queue); in iov2physical()
582 p->desc.UpdateSet = physical_UpdateSet; in iov2physical()
583 p->desc.IsSet = physical_IsSet; in iov2physical()
584 p->desc.Read = physical_DescriptorRead; in iov2physical()
585 p->desc.Write = physical_DescriptorWrite; in iov2physical()
586 p->type = PHYS_DIRECT; in iov2physical()
587 p->dl = dl; in iov2physical()
588 p->out = NULL; in iov2physical()
589 p->connect_count = 1; in iov2physical()
591 physical_SetDevice(p, p->name.full); in iov2physical()
593 p->link.lcp.fsm.bundle = dl->bundle; in iov2physical()
594 p->link.lcp.fsm.link = &p->link; in iov2physical()
595 memset(&p->link.lcp.fsm.FsmTimer, '\0', sizeof p->link.lcp.fsm.FsmTimer); in iov2physical()
596 memset(&p->link.lcp.fsm.OpenTimer, '\0', sizeof p->link.lcp.fsm.OpenTimer); in iov2physical()
597 memset(&p->link.lcp.fsm.StoppedTimer, '\0', in iov2physical()
598 sizeof p->link.lcp.fsm.StoppedTimer); in iov2physical()
599 p->link.lcp.fsm.parent = &dl->fsmp; in iov2physical()
600 lcp_SetupCallbacks(&p->link.lcp); in iov2physical()
602 p->link.ccp.fsm.bundle = dl->bundle; in iov2physical()
603 p->link.ccp.fsm.link = &p->link; in iov2physical()
604 /* Our in.state & out.state are NULL (no link-level ccp yet) */ in iov2physical()
605 memset(&p->link.ccp.fsm.FsmTimer, '\0', sizeof p->link.ccp.fsm.FsmTimer); in iov2physical()
606 memset(&p->link.ccp.fsm.OpenTimer, '\0', sizeof p->link.ccp.fsm.OpenTimer); in iov2physical()
607 memset(&p->link.ccp.fsm.StoppedTimer, '\0', in iov2physical()
608 sizeof p->link.ccp.fsm.StoppedTimer); in iov2physical()
609 p->link.ccp.fsm.parent = &dl->fsmp; in iov2physical()
610 ccp_SetupCallbacks(&p->link.ccp); in iov2physical()
612 p->hdlc.lqm.owner = &p->link.lcp; in iov2physical()
613 p->hdlc.ReportTimer.state = TIMER_STOPPED; in iov2physical()
614 p->hdlc.lqm.timer.state = TIMER_STOPPED; in iov2physical()
616 p->fd = fd; in iov2physical()
617 p->link.stats.total.in.SampleOctets = (long long *)iov[(*niov)++].iov_base; in iov2physical()
618 p->link.stats.total.out.SampleOctets = (long long *)iov[(*niov)++].iov_base; in iov2physical()
619 p->link.stats.parent = dl->bundle->ncp.mp.active ? in iov2physical()
620 &dl->bundle->ncp.mp.link.stats.total : NULL; in iov2physical()
621 p->link.stats.gather = 1; in iov2physical()
623 type = (long)p->handler; in iov2physical()
624 p->handler = NULL; in iov2physical()
625 for (h = 0; h < NDEVICES && p->handler == NULL; h++) in iov2physical()
626 p->handler = (*devices[h].iov2device)(type, p, iov, niov, maxiov, in iov2physical()
628 if (p->handler == NULL) { in iov2physical()
629 log_Printf(LogPHASE, "%s: Unknown link type\n", p->link.name); in iov2physical()
631 physical_SetupStack(p, "unknown", PHYSICAL_NOFORCE); in iov2physical()
634 p->link.name, p->name.full, p->handler->name); in iov2physical()
636 if (p->hdlc.lqm.method && p->hdlc.lqm.timer.load) in iov2physical()
637 lqr_reStart(&p->link.lcp); in iov2physical()
638 hdlc_StartTimer(&p->hdlc); in iov2physical()
640 throughput_restart(&p->link.stats.total, "physical throughput", in iov2physical()
641 Enabled(dl->bundle, OPT_THROUGHPUT)); in iov2physical()
643 return p; in iov2physical()
663 physical2iov(struct physical *p, struct iovec *iov, int *niov, int maxiov, in physical2iov() argument
670 if (p) { in physical2iov()
671 hdlc_StopTimer(&p->hdlc); in physical2iov()
672 lqr_StopTimer(p); in physical2iov()
673 timer_Stop(&p->link.lcp.fsm.FsmTimer); in physical2iov()
674 timer_Stop(&p->link.ccp.fsm.FsmTimer); in physical2iov()
675 timer_Stop(&p->link.lcp.fsm.OpenTimer); in physical2iov()
676 timer_Stop(&p->link.ccp.fsm.OpenTimer); in physical2iov()
677 timer_Stop(&p->link.lcp.fsm.StoppedTimer); in physical2iov()
678 timer_Stop(&p->link.ccp.fsm.StoppedTimer); in physical2iov()
679 if (p->handler) { in physical2iov()
680 h = p->handler; in physical2iov()
681 p->handler = (struct device *)(long)p->handler->type; in physical2iov()
684 if (Enabled(p->dl->bundle, OPT_KEEPSESSION) || in physical2iov()
685 tcgetpgrp(p->fd) == getpgrp()) in physical2iov()
686 p->session_owner = getpid(); /* So I'll eventually get HUP'd */ in physical2iov()
688 p->session_owner = (pid_t)-1; in physical2iov()
689 timer_Stop(&p->link.stats.total.Timer); in physical2iov()
695 if (p) in physical2iov()
696 free(p); in physical2iov()
697 return -1; in physical2iov()
700 iov[*niov].iov_base = (void *)p; in physical2iov()
701 iov[*niov].iov_len = sizeof *p; in physical2iov()
704 iov[*niov].iov_base = p ? (void *)p->link.stats.total.in.SampleOctets : NULL; in physical2iov()
707 iov[*niov].iov_base = p ? (void *)p->link.stats.total.out.SampleOctets : NULL; in physical2iov()
712 if (p) { in physical2iov()
713 if (h && h->device2iov) in physical2iov()
714 (*h->device2iov)(h, iov, niov, maxiov, auxfd, nauxfd); in physical2iov()
731 return p ? p->fd : 0; in physical2iov()
735 physical_LockedDevice(struct physical *p) in physical_LockedDevice() argument
737 if (p->fd >= 0 && *p->name.full == '/' && p->type != PHYS_DIRECT) in physical_LockedDevice()
738 return p->name.base; in physical_LockedDevice()
744 physical_ChangedPid(struct physical *p, pid_t newpid) in physical_ChangedPid() argument
746 if (physical_LockedDevice(p)) { in physical_ChangedPid()
749 if ((res = ID0uu_lock_txfr(p->name.base, newpid)) != UU_LOCK_OK) in physical_ChangedPid()
755 physical_IsSync(struct physical *p) in physical_IsSync() argument
757 return p->cfg.speed == 0; in physical_IsSync()
761 physical_DeviceMTU(struct physical *p) in physical_DeviceMTU() argument
763 return p->handler ? p->handler->mtu : 0; in physical_DeviceMTU()
766 const char *physical_GetDevice(struct physical *p) in physical_GetDevice() argument
768 return p->name.full; in physical_GetDevice()
772 physical_SetDeviceList(struct physical *p, int argc, const char *const *argv) in physical_SetDeviceList() argument
777 p->cfg.devlist[sizeof p->cfg.devlist - 1] = '\0'; in physical_SetDeviceList()
778 for (f = 0, pos = 0; f < argc && pos < sizeof p->cfg.devlist - 1; f++) { in physical_SetDeviceList()
780 p->cfg.devlist[pos++] = '\0'; in physical_SetDeviceList()
781 strncpy(p->cfg.devlist + pos, argv[f], sizeof p->cfg.devlist - pos - 1); in physical_SetDeviceList()
782 pos += strlen(p->cfg.devlist + pos); in physical_SetDeviceList()
784 p->cfg.ndev = f; in physical_SetDeviceList()
788 physical_SetSync(struct physical *p) in physical_SetSync() argument
790 p->cfg.speed = 0; in physical_SetSync()
794 physical_SetRtsCts(struct physical *p, int enable) in physical_SetRtsCts() argument
796 p->cfg.rts_cts = enable ? 1 : 0; in physical_SetRtsCts()
801 physical_Read(struct physical *p, void *buf, size_t nbytes) in physical_Read() argument
805 if (p->handler && p->handler->read) in physical_Read()
806 ret = (*p->handler->read)(p, buf, nbytes); in physical_Read()
808 ret = read(p->fd, buf, nbytes); in physical_Read()
816 physical_Write(struct physical *p, const void *buf, size_t nbytes) in physical_Write() argument
820 if (p->handler && p->handler->write) in physical_Write()
821 return (*p->handler->write)(p, buf, nbytes); in physical_Write()
823 return write(p->fd, buf, nbytes); in physical_Write()
830 struct physical *p = descriptor2physical(d); in physical_doUpdateSet() local
834 if (p->fd >= 0) { in physical_doUpdateSet()
836 FD_SET(p->fd, r); in physical_doUpdateSet()
837 log_Printf(LogTIMER, "%s: fdset(r) %d\n", p->link.name, p->fd); in physical_doUpdateSet()
841 FD_SET(p->fd, e); in physical_doUpdateSet()
842 log_Printf(LogTIMER, "%s: fdset(e) %d\n", p->link.name, p->fd); in physical_doUpdateSet()
845 if (w && (force || link_QueueLen(&p->link) || p->out)) { in physical_doUpdateSet()
846 FD_SET(p->fd, w); in physical_doUpdateSet()
847 log_Printf(LogTIMER, "%s: fdset(w) %d\n", p->link.name, p->fd); in physical_doUpdateSet()
850 if (sets && *n < p->fd + 1) in physical_doUpdateSet()
851 *n = p->fd + 1; in physical_doUpdateSet()
858 physical_RemoveFromSet(struct physical *p, fd_set *r, fd_set *w, fd_set *e) in physical_RemoveFromSet() argument
860 if (p->handler && p->handler->removefromset) in physical_RemoveFromSet()
861 return (*p->handler->removefromset)(p, r, w, e); in physical_RemoveFromSet()
866 if (p->fd >= 0) { in physical_RemoveFromSet()
867 if (r && FD_ISSET(p->fd, r)) { in physical_RemoveFromSet()
868 FD_CLR(p->fd, r); in physical_RemoveFromSet()
869 log_Printf(LogTIMER, "%s: fdunset(r) %d\n", p->link.name, p->fd); in physical_RemoveFromSet()
872 if (e && FD_ISSET(p->fd, e)) { in physical_RemoveFromSet()
873 FD_CLR(p->fd, e); in physical_RemoveFromSet()
874 log_Printf(LogTIMER, "%s: fdunset(e) %d\n", p->link.name, p->fd); in physical_RemoveFromSet()
877 if (w && FD_ISSET(p->fd, w)) { in physical_RemoveFromSet()
878 FD_CLR(p->fd, w); in physical_RemoveFromSet()
879 log_Printf(LogTIMER, "%s: fdunset(w) %d\n", p->link.name, p->fd); in physical_RemoveFromSet()
891 struct physical *p = descriptor2physical(d); in physical_IsSet() local
892 return p->fd >= 0 && FD_ISSET(p->fd, fdset); in physical_IsSet()
896 physical_Login(struct physical *p, const char *name) in physical_Login() argument
898 if (p->type == PHYS_DIRECT && *p->name.base && !p->Utmp) { in physical_Login()
908 if (p->handler && (p->handler->type == TCP_DEVICE || in physical_Login()
909 p->handler->type == UDP_DEVICE)) { in physical_Login()
910 strncpy(ut.ut_host, p->name.base, sizeof ut.ut_host); in physical_Login()
915 strncpy(ut.ut_line, p->name.base, sizeof ut.ut_line); in physical_Login()
920 p->Utmp = 1; in physical_Login()
925 physical_SetMode(struct physical *p, int mode) in physical_SetMode() argument
927 if ((p->type & (PHYS_DIRECT|PHYS_DEDICATED) || in physical_SetMode()
929 (!(p->type & PHYS_DIRECT) || !(mode & PHYS_BACKGROUND))) { in physical_SetMode()
930 /* Note: The -direct -> -background is for callback ! */ in physical_SetMode()
931 log_Printf(LogWARN, "%s: Cannot change mode %s to %s\n", p->link.name, in physical_SetMode()
932 mode2Nam(p->type), mode2Nam(mode)); in physical_SetMode()
935 p->type = mode; in physical_SetMode()
940 physical_DeleteQueue(struct physical *p) in physical_DeleteQueue() argument
942 if (p->out) { in physical_DeleteQueue()
943 m_freem(p->out); in physical_DeleteQueue()
944 p->out = NULL; in physical_DeleteQueue()
946 link_DeleteQueue(&p->link); in physical_DeleteQueue()
950 physical_SetDevice(struct physical *p, const char *name) in physical_SetDevice() argument
954 if (name != p->name.full) { in physical_SetDevice()
955 strncpy(p->name.full, name, sizeof p->name.full - 1); in physical_SetDevice()
956 p->name.full[sizeof p->name.full - 1] = '\0'; in physical_SetDevice()
958 p->name.base = *p->name.full == '!' ? p->name.full + 1 : in physical_SetDevice()
959 strncmp(p->name.full, _PATH_DEV, len) ? in physical_SetDevice()
960 p->name.full : p->name.full + len; in physical_SetDevice()
964 physical_Found(struct physical *p) in physical_Found() argument
969 if (*p->name.full == '/') { in physical_Found()
970 snprintf(fn, sizeof fn, "%s%s.if", _PATH_VARRUN, p->name.base); in physical_Found()
973 fprintf(lockfile, "%s%d\n", TUN_NAME, p->dl->bundle->unit); in physical_Found()
977 p->link.name, fn, strerror(errno)); in physical_Found()
980 throughput_start(&p->link.stats.total, "physical throughput", in physical_Found()
981 Enabled(p->dl->bundle, OPT_THROUGHPUT)); in physical_Found()
982 p->connect_count++; in physical_Found()
983 p->input.sz = 0; in physical_Found()
985 log_Printf(LogPHASE, "%s: Connected!\n", p->link.name); in physical_Found()
989 physical_Open(struct physical *p) in physical_Open() argument
995 if (p->fd >= 0) in physical_Open()
996 log_Printf(LogDEBUG, "%s: Open: Modem is already open!\n", p->link.name); in physical_Open()
998 else if (p->type == PHYS_DIRECT) { in physical_Open()
999 physical_SetDevice(p, ""); in physical_Open()
1000 p->fd = STDIN_FILENO; in physical_Open()
1001 for (h = 0; h < NDEVICES && p->handler == NULL && p->fd >= 0; h++) in physical_Open()
1002 p->handler = (*devices[h].create)(p); in physical_Open()
1004 if (p->fd >= 0) { in physical_Open()
1005 if (p->handler == NULL) { in physical_Open()
1006 physical_SetupStack(p, "unknown", PHYSICAL_NOFORCE); in physical_Open()
1007 log_Printf(LogDEBUG, "%s: stdin is unidentified\n", p->link.name); in physical_Open()
1009 physical_Found(p); in physical_Open()
1012 dev = p->cfg.devlist; in physical_Open()
1014 while (devno < p->cfg.ndev && p->fd < 0) { in physical_Open()
1015 physical_SetDevice(p, dev); in physical_Open()
1016 if (physical_Lock(p)) { in physical_Open()
1019 if (*p->name.full == '/') { in physical_Open()
1020 p->fd = ID0open(p->name.full, O_RDWR | O_NONBLOCK); in physical_Open()
1021 if (p->fd < 0) in physical_Open()
1025 wasfd = p->fd; in physical_Open()
1026 for (h = 0; h < NDEVICES && p->handler == NULL; h++) in physical_Open()
1027 if ((p->handler = (*devices[h].create)(p)) == NULL && wasfd != p->fd) in physical_Open()
1030 if (p->fd < 0) { in physical_Open()
1033 log_Printf(LogWARN, "%s: %s: %s\n", p->link.name, p->name.full, in physical_Open()
1037 " a '!' or contain at least one ':'\n", p->link.name, in physical_Open()
1038 p->name.full); in physical_Open()
1040 physical_Unlock(p); in physical_Open()
1042 physical_Found(p); in physical_Open()
1049 return p->fd; in physical_Open()
1053 physical_SetupStack(struct physical *p, const char *who, int how) in physical_SetupStack() argument
1055 link_EmptyStack(&p->link); in physical_SetupStack()
1057 (how == PHYSICAL_NOFORCE && physical_IsSync(p))) in physical_SetupStack()
1058 link_Stack(&p->link, &synclayer); in physical_SetupStack()
1060 link_Stack(&p->link, &asynclayer); in physical_SetupStack()
1061 link_Stack(&p->link, &hdlclayer); in physical_SetupStack()
1064 link_Stack(&p->link, &acflayer); in physical_SetupStack()
1065 link_Stack(&p->link, &protolayer); in physical_SetupStack()
1066 link_Stack(&p->link, &lqrlayer); in physical_SetupStack()
1067 link_Stack(&p->link, &ccplayer); in physical_SetupStack()
1068 link_Stack(&p->link, &vjlayer); in physical_SetupStack()
1069 link_Stack(&p->link, &tcpmsslayer); in physical_SetupStack()
1071 link_Stack(&p->link, &natlayer); in physical_SetupStack()
1073 if (how == PHYSICAL_FORCE_ASYNC && physical_IsSync(p)) { in physical_SetupStack()
1075 p->cfg.speed = MODEM_SPEED; in physical_SetupStack()
1076 } else if (how == PHYSICAL_FORCE_SYNC && !physical_IsSync(p)) { in physical_SetupStack()
1079 physical_SetSync(p); in physical_SetupStack()
1084 physical_StopDeviceTimer(struct physical *p) in physical_StopDeviceTimer() argument
1086 if (p->handler && p->handler->stoptimer) in physical_StopDeviceTimer()
1087 (*p->handler->stoptimer)(p); in physical_StopDeviceTimer()
1091 physical_AwaitCarrier(struct physical *p) in physical_AwaitCarrier() argument
1093 if (p->handler && p->handler->awaitcarrier) in physical_AwaitCarrier()
1094 return (*p->handler->awaitcarrier)(p); in physical_AwaitCarrier()
1101 physical_SetAsyncParams(struct physical *p, u_int32_t mymap, u_int32_t hismap) in physical_SetAsyncParams() argument
1103 if (p->handler && p->handler->setasyncparams) in physical_SetAsyncParams()
1104 return (*p->handler->setasyncparams)(p, mymap, hismap); in physical_SetAsyncParams()
1106 async_SetLinkParams(&p->async, mymap, hismap); in physical_SetAsyncParams()
1110 physical_Slot(struct physical *p) in physical_Slot() argument
1112 if (p->handler && p->handler->slot) in physical_Slot()
1113 return (*p->handler->slot)(p); in physical_Slot()
1115 return -1; in physical_Slot()
1119 physical_SetPPPoEnonstandard(struct physical *p, int enable) in physical_SetPPPoEnonstandard() argument
1121 p->cfg.nonstandard_pppoe = enable ? 1 : 0; in physical_SetPPPoEnonstandard()
1122 p->cfg.pppoe_configured = 1; in physical_SetPPPoEnonstandard()