Linux认证辅导:Linux内核中流量控制(6)Linux认证考试

文章作者 100test 发表时间 2009:11:11 16:18:21
来源 100Test.Com百考试题网


  4.2 Qdisc操作结构的一些基本操作/* net/sched/sch_api.c */ // 登记Qdisc操作结构, 每种排队算法都是通过Qdisc操作结构实现的

  int register_qdisc(struct Qdisc_ops *qops)

  {

  struct Qdisc_ops *q, **qp.

  int rc = -EEXIST.

  write_lock(&.qdisc_mod_lock).

  // qdisc_base是全局变量, 系统的Qdisc操作结构链表头

  //遍历Qdisc操作链表

  for (qp = &.qdisc_base. (q = *qp) != NULL. qp = &.q->.next) // 如果ID相同, 返回已经存在错误if (!strcmp(qops->.id, q->.id))

  goto out.

  // 如果操作结构中没有定义入队,出队和重入队操作的话, 用系统缺省的

  if (qops->.enqueue == NULL)

  qops->.enqueue = noop_qdisc_ops.enqueue.

  if (qops->.requeue == NULL)

  qops->.requeue = noop_qdisc_ops.requeue.

  if (qops->.dequeue == NULL)

  qops->.dequeue = noop_qdisc_ops.dequeue.

  // 将结构节点添加到链表, 注意这里没使用内核里最常见的list链表操作

  //这是个单向链表

  qops->.next = NULL.

  *qp = qops.

  rc = 0.

  out:

  write_unlock(&.qdisc_mod_lock).

  return rc.

  }

  //拆除Qdisc操作结构

  int unregister_qdisc(struct Qdisc_ops *qops)

  {

  struct Qdisc_ops *q, **qp.

  int err = -ENOENT.

  write_lock(&.qdisc_mod_lock).

  // 由于没有用list, 必须遍历链表找到节点在链表中的位置for (qp = &.qdisc_base. (q=*qp)!=NULL. qp = &.q->.next)

  if (q == qops)

  break.


相关文章


Linux认证复习题100道含答案2550(2)Linux认证考试
第三方认证考试-大纲:LPIC201考纲(二)Linux认证考试
第三方认证考试-大纲:LPIC201考纲(三)Linux认证考试
第三方认证考试-大纲:LPIC201考纲(四)Linux认证考试
Linux认证辅导:Linux内核中流量控制(6)Linux认证考试
linux下获取系统时间的方法Linux认证考试
linux认证辅导:inux下echo命令详解Linux认证考试
Linux下设置Oracle实例和监听自启动Linux认证考试
Linux安全设置全面坚固系统稳定安全Linux认证考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛