int pfq_egress_bind(pfq_t *q, const char *dev, int queue) { struct pfq_binding b; int index; if (strcmp(dev, "any")==0) { index = Q_ANY_DEVICE; } else { index = pfq_ifindex(q, dev); if (index == -1) { return Q_ERROR(q, "PFQ: egress_bind: device not found"); } } b.gid = 0; b.if_index = index; b.hw_queue = queue; if (setsockopt(q->fd, PF_Q, Q_SO_EGRESS_BIND, &b, sizeof(b)) == -1) return Q_ERROR(q, "PFQ: egress bind error"); return Q_OK(q); }
int pfq_unbind_group(pfq_t *q, int gid, const char *dev, int queue) /* Q_ANY_QUEUE */ { struct pfq_binding b; int index; if (strcmp(dev, "any")==0) { index = Q_ANY_DEVICE; } else { index = pfq_ifindex(q, dev); if (index == -1) { return Q_ERROR(q, "PFQ: unbind_group: device not found"); } } b.gid = gid; b.if_index = index; b.hw_queue = queue; if (setsockopt(q->fd, PF_Q, Q_SO_GROUP_UNBIND, &b, sizeof(b)) == -1) { return Q_ERROR(q, "PFQ: unbind error"); } return Q_OK(q); }
void test_ifindex() { pfq_t * q = pfq_open(64, 1024, 1024); assert(q); assert(pfq_ifindex(q, "lo") != -1); pfq_close(q); }