1. 软件版本:
ppp-2.4.7.tar.gz
2. 源码框架:
3. 源码详解:
pppd函数入口
pppd状态机制:
ppp-2.4.7.tar.gz
2. 源码框架:
3. 源码详解:
pppd函数入口
File: pppd/main.c ---------------------------------------------------------------------------------------------- int main(argc, argv) int argc; char *argv[]; #NOTE: 注意这种定义命令行参数的形式 { int i, t; char *p; struct passwd *pw; struct protent *protp; char numbuf[16]; strlcpy(path_ipup, _PATH_IPUP, sizeof(path_ipup)); #NOTE: /etc/ppp/ip-up 实际运行环境中,并没发现这些文件 strlcpy(path_ipdown, _PATH_IPDOWN, sizeof(path_ipdown)); #NOTE: /etc/ppp/ip-down strlcpy(path_ipv6up, _PATH_IPV6UP, sizeof(path_ipv6up)); #NOTE: /etc/ppp/ipv6-up strlcpy(path_ipv6down, _PATH_IPV6DOWN, sizeof(path_ipv6down)); #NOTE: /etc/ppp/ipv6-down link_stats_valid = 0; new_phase(PHASE_INITIALIZE); #NOTE: new_phase()函数为pppd状态机函数 script_env = NULL; /* Initialize syslog facilities */ reopen_log(); if (gethostname(hostname, MAXNAMELEN) < 0 ) { option_error("Couldn't get hostname: %m"); exit(1); } hostname[MAXNAMELEN-1] = 0; /* make sure we don't create world or group writable files. */ umask(umask(0777) | 022); uid = getuid(); privileged = uid == 0; slprintf(numbuf, sizeof(numbuf), "%d", uid); script_setenv("ORIG_UID", numbuf, 0); ngroups = getgroups(NGROUPS_MAX, groups); /* * Initialize magic number generator now so that protocols may * use magic numbers in initialization. */ magic_init(); |
pppd状态机制:
File:pppd/main.c ---------------------------------------------------------------------------------------------- int phase; void new_phase(p) int p; { phase = p; if (new_phase_hook) #NOTE: 函数new_phase_hook()默认为空 (*new_phase_hook)(p); notify(phasechange, p); } void notify(notif, val) struct notifier *notif; int val; { struct notifier *np; while ((np = notif) != 0) { notif = np->next; (*np->func)(np->arg, val); } } |