[ovs-dev] xlate_select_group() not being invoked for every packet
Mohammad Ali Salahuddin
saeenali at hotmail.com
Tue Feb 18 15:31:19 UTC 2014
Hello,
I am experimenting with the group "select" feature, for which I have modified "group_best_live_bucket()" function in "ofproto-dpif-xlate.c" to stochastically choose a bucket based on bucket weights (changes shown below).
My understanding was that every time a packet arrives at the switch and matches the flow entry it is fowarded to the corresponding group (type=select in my case), which will result in a bucket being triggered. So, I was expecting "xlate_select_group()" function to be called for every packet (which invokes the "group_best_live_bucket()" function). However, I did not see the results I was expecting. Instead, a single bucket was being choosen continuously (when buckets should be choosen probabilitically, based on my changes).
Then, I started to a log a message whenever this function was invoked. To my surprise, the logging revealed that this function is not being invoked for every packet.
Is this the expected behavior? Am I missing something?
Help/directions in this regard will be highly appreciated.
Thank you!
Note: I have modified "group_best_live_bucket()" function as follows (without logging):
// for stochastic switchingstatic const struct ofputil_bucket *group_best_live_bucket(const struct xlate_ctx *ctx, const struct group_dpif *group, uint32_t basis){ const struct ofputil_bucket *best_bucket = NULL; uint32_t rand_num = 0, sum = 0; const struct ofputil_bucket *bucket; const struct list *buckets;
// initialize random seed (once only) if (!is_srand_initialized) { srand(time(NULL)); is_srand_initialized = true; } // generate a number number in [1, 10] rand_num = (rand() % 10) + 1;
group_dpif_get_buckets(group, &buckets); LIST_FOR_EACH (bucket, list_node, buckets) { sum += bucket->weight; if (rand_num <= sum) { return bucket; // return this bucket } }
return best_bucket; // return NULL}
FYI, my group table entry corresponds to the following ovs-ofctl command:
ovs-ofctl -O OpenFlow13 add-group tcp:127.0.0.1:6641 group_id=0,type=select,bucket=weight=8,mod_dl_src=0A:00:14:01:00:05,mod_dl_dst=0A:00:14:FE:00:02,output=5,bucket=weight=2,mod_dl_src=0A:00:13:01:00:04,mod_dl_dst=0A:00:13:FE:00:02,output=4
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openvswitch.org/pipermail/ovs-dev/attachments/20140218/e067fa5c/attachment-0005.html>
More information about the dev
mailing list