PPPD源码分析

1. 软件版本:
    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);
    }    
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值