有人研究过pppd吗,pppd是怎么完成发现阶段的?求助!

LENOVO_ 2011-07-12 10:34:01
pppd 是怎么完成“发现阶段”的?

pppd的脚本文件 /etc/ppp/peers/dsl-provider有一句 "plugin rp-pppoe.so eth0"


pppd
从main.c中的 main 开始:
main ->
parse_args ->
find_option -> process_option ->
switch (opt->type)
{
case o_special:
parser = (int (*) __P((char **))) opt->addr;
if (!(*parser)(argv))
return 0;
}

option_t general_options[] = {
#ifdef PLUGIN
{ "plugin", o_special, (void *)loadplugin,
"Load a plug-in module into pppd", OPT_PRIV | OPT_A2LIST },
#endif
{ NULL }
};
从参数列表看出,脚本调用了loadplugin函数,
loadplugin
{
dlopen;
init = (void (*)(void))dlsym(handle, "plugin_init");
(*init)();
}
从rp-pppoe的代码来看
void
plugin_init(void)
{
if (!ppp_available() && !new_style_driver) {
fatal("Linux kernel does not support PPPoE -- are you running 2.4.x?");
}

add_options(Options);

info("RP-PPPoE plugin version %s compiled against pppd %s",
RP_VERSION, VERSION);
}


回到process_option
case o_special:
parser = (int (*) __P((char **))) opt->addr;
if (!(*parser)(argv))
return 0;
获取到 plugin 对应的函数地址loadplugin,然后调用它。
从整个流程看,并没有调用 rp-pppoe的main函数,也只有 pppoe-discovery.c中的main函数实现了
sendPADI,waitForPADO,sendPADR,waitForPADS.

请问到底怎么做到的?
...全文
659 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
汗晕倒 2011-08-20
  • 打赏
  • 举报
回复
pppd没有发现阶段吧,是rp-pppoe去发现的,不过在pppd的代码中有个discovery.c的代码,这个就是发现过程。
LENOVO_ 2011-07-18
  • 打赏
  • 举报
回复
版主不在吗?

高手不来CSDN 吗?真让我失望,有谁能推荐个好的论坛?专门做 linux 嵌入式应用层的?
LENOVO_ 2011-07-18
  • 打赏
  • 举报
回复
人工置顶。

版主,快告诉我在哪个版块 做 linux 下开发的人多?
LENOVO_ 2011-07-12
  • 打赏
  • 举报
回复
谁知道这么问题 在哪个板块 熟悉这个的多?

我转过去!
luciferisnotsatan 2011-07-12
  • 打赏
  • 举报
回复
没用过
帮顶

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧