static inline struct rtnl_fifo *fifo_alloc(struct rtnl_qdisc *qdisc) { if (!qdisc->q_subdata) qdisc->q_subdata = calloc(1, sizeof(struct rtnl_fifo)); return fifo_qdisc(qdisc); }
static struct nl_msg *fifo_get_opts(struct rtnl_qdisc *qdisc) { struct rtnl_fifo *fifo; struct tc_fifo_qopt opts; struct nl_msg *msg; fifo = fifo_qdisc(qdisc); if (!fifo || !(fifo->qf_mask & SCH_FIFO_ATTR_LIMIT)) return NULL; msg = nlmsg_build_no_hdr(); if (!msg) goto errout; memset(&opts, 0, sizeof(opts)); opts.limit = fifo->qf_limit; if (nlmsg_append(msg, &opts, sizeof(opts), 0) < 0) goto errout; return msg; errout: nlmsg_free(msg); return NULL; }
static void pfifo_dump_line(struct rtnl_qdisc *qdisc, struct nl_dump_params *p) { struct rtnl_fifo *fifo = fifo_qdisc(qdisc); if (fifo) nl_dump(p, " limit %u packets", fifo->qf_limit); }
static int pfifo_dump_brief(struct rtnl_qdisc *qdisc, struct nl_dump_params *p, int line) { struct rtnl_fifo *fifo = fifo_qdisc(qdisc); if (fifo) dp_dump(p, " limit %u packets", fifo->qf_limit); return line; }
/** * Get limit of a FIFO qdisc. * @arg qdisc FIFO qdisc. * @return Numeric limit or a negative error code. */ int rtnl_qdisc_fifo_get_limit(struct rtnl_qdisc *qdisc) { struct rtnl_fifo *fifo; fifo = fifo_qdisc(qdisc); if (fifo && fifo->qf_mask & SCH_FIFO_ATTR_LIMIT) return fifo->qf_limit; else return nl_errno(ENOMEM); }
/** * Get limit of a FIFO qdisc. * @arg qdisc FIFO qdisc. * @return Numeric limit or a negative error code. */ int rtnl_qdisc_fifo_get_limit(struct rtnl_qdisc *qdisc) { struct rtnl_fifo *fifo; fifo = fifo_qdisc(qdisc); if (fifo && fifo->qf_mask & SCH_FIFO_ATTR_LIMIT) return fifo->qf_limit; else return -NLE_NOATTR; }
static void bfifo_dump_line(struct rtnl_qdisc *qdisc, struct nl_dump_params *p) { struct rtnl_fifo *fifo = fifo_qdisc(qdisc); if (fifo) { char *unit; double r; r = nl_cancel_down_bytes(fifo->qf_limit, &unit); nl_dump(p, " limit %.1f%s", r, unit); } }
static int bfifo_dump_brief(struct rtnl_qdisc *qdisc, struct nl_dump_params *p, int line) { struct rtnl_fifo *fifo = fifo_qdisc(qdisc); if (fifo) { char *unit; double r; r = nl_cancel_down_bytes(fifo->qf_limit, &unit); dp_dump(p, " limit %.1f%s", r, unit); } return line; }