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

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


  //返回指定类别的Qdisc叶节点

  static struct Qdisc *qdisc_leaf(struct Qdisc *p, u32 classid)

  {

  unsigned long cl.

  struct Qdisc *leaf.

  // Qdisc类别操作

  struct Qdisc_class_ops *cops = p->.ops->.cl_ops.

  if (cops == NULL)

  return NULL.

  //获取指定classid类型的类别句柄

  cl = cops->.get(p, classid).

  if (cl == 0)

  return NULL.

  //调用类别操作结构的left成员函数获取叶Qdisc节点

  leaf = cops->.leaf(p, cl).

  cops->.put(p, cl).

  return leaf.

  }

  /* Graft qdisc "new" to class "classid" of qdisc "parent" or

  to device "dev". Old qdisc is not destroyed but returned in *old.

  */

  // "嫁接"Qdisc, 将新的Qdisc节点添加到父节点作为叶节点static int qdisc_graft(struct net_device *dev, struct Qdisc *parent, u32 classid, struct Qdisc *new, struct Qdisc **old)

  {

  int err = 0.

  struct Qdisc *q = *old.

  if (parent == NULL) {

  // 父qdisc节点为空, 将新节点作为dev的基本qdisc, 返回dev原来的老的qdisc

  if (q &.&. q->.flags&.TCQ_F_INGRESS) {

  *old = dev_graft_qdisc(dev, q).

  } else {

  *old = dev_graft_qdisc(dev, new).

  }

  } else {

  //父qdisc非空情况

  //将使用Qdisc类操作结构中的相关成员函数来完成操作

  struct Qdisc_class_ops *cops = parent->.ops->.cl_ops.

  err = -EINVAL.

  if (cops) {

  //获取类别句柄值

  unsigned long cl = cops->.get(parent, classid).

  if (cl) {

  // 类别有效, 调用graft成员函数将新节点插入qdisc树中err = cops->.graft(parent, cl, new, old).

  if (new)

  new->.parent = classid.

  cops->.put(parent, cl).

  }

  }

  }

  return err.

  }


相关文章


Linux网络备份MySQL的方法Linux认证考试
Linux系统集成桌面环境GNOME的操作技巧Linux认证考试
expect脚本安装和一个简单的脚本Linux认证考试
linux下通过串口登陆交换机Linux认证考试
Linux认证辅导:Linux内核中流量控制(5)Linux认证考试
Linux认证辅导:Linux内核中流量控制(4)Linux认证考试
Linux认证辅导:Linux内核中流量控制(3)Linux认证考试
Linux认证辅导:Linux内核中流量控制(2)Linux认证考试
Linux认证辅导:Linux内核中流量控制(1)Linux认证考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛