/* * this is used by the mmap code. mmap sees the whole flow table * (including the overflow table) as one large table. so, given * an offset into that large memory, we should return the correct * virtual address */ void * vr_flow_get_va(struct vrouter *router, uint64_t offset) { struct vr_btable *table = router->vr_flow_table; unsigned int size = vr_flow_table_size(router); if (offset >= vr_flow_table_size(router)) { table = router->vr_oflow_table; offset -= size; } return vr_btable_get_address(table, offset); }
/* * sandesh handler for vr_flow_req */ void vr_flow_req_process(void *s_req) { int ret = 0; struct vrouter *router; vr_flow_req *req = (vr_flow_req *)s_req; router = vrouter_get(req->fr_rid); switch (req->fr_op) { case FLOW_OP_FLOW_TABLE_GET: req->fr_ftable_size = vr_flow_table_size(router) + vr_oflow_table_size(router); #ifdef __KERNEL__ req->fr_ftable_dev = vr_flow_major; #endif break; case FLOW_OP_FLOW_SET: ret = vr_flow_set(router, req); break; default: ret = -EINVAL; } vr_message_response(VR_FLOW_OBJECT_ID, req, ret); return; }