summaryrefslogtreecommitdiffstats
path: root/test
AgeCommit message (Expand)AuthorFilesLines
2018-07-27vcl: use events for epoll/select/read/writeFlorin Coras1-1/+1
2018-07-26L2 Flood: use the buffer clone API rather than buffer recycleNeale Ranns1-0/+148
2018-07-25make_test: Add equal-cost multi-path routing testsJan Gelety1-0/+252
2018-07-24Create a unit-test pluginDave Barach2-1/+42
2018-07-24test frame work pump thread exit: set flag then wakeNeale Ranns1-2/+2
2018-07-23NAT44: fix forwarding feature bug (VPP-1349)Matus Fabian1-16/+3
2018-07-22make test-ext: a new test target that builds VOM (existing one no longer do)Neale Ranns1-1/+4
2018-07-20IP directed broadcastNeale Ranns2-0/+81
2018-07-20QoS: marking and recording for MPLS and VLANNeale Ranns1-4/+210
2018-07-19test_jvpp: improve error message when JVpp JARS are missingMarek Gradzki1-0/+7
2018-07-19gbp: Add support for ACLMohsin Kazmi1-10/+78
2018-07-18make_test: dhcp - add lease time test and wrong XID in OFFER testJan Gelety1-7/+102
2018-07-17VOM: support for pipesNeale Ranns2-6/+82
2018-07-13srv6-as: Adding support for L2 trafficFrancois Clad1-0/+199
2018-07-13srv6-as: Adding test casesFrancois Clad1-0/+692
2018-07-11srv6: Fixing SRH parsing bug in Scapy 2.4Francois Clad1-0/+28
2018-07-11make_test: Add missing classifier testsJan Gelety3-126/+1294
2018-07-10NAT44: multiple outside FIB tables (VPP-1314)Matus Fabian1-21/+442
2018-07-10Do not translate packets destined for NAT64 inside interface (VPP-1331)Juraj Sloboda1-2/+60
2018-07-09IGMP improvementsNeale Ranns5-243/+642
2018-07-09vxlan:use bihash_16_8 for ipv4 lookupEyal Bari1-5/+5
2018-07-07PipesNeale Ranns2-0/+267
2018-07-05VPP-1335 vapi crash when memclnt_keepalive receivedKlement Sekera1-4/+4
2018-07-04fix VPP-1312 Invalid UDP packet length in ipsecKlement Sekera1-26/+22
2018-07-03vom: Add cross connect supportMohsin Kazmi1-0/+64
2018-07-02make_test: add icmp packet size sweep and icmp echo testsJan Gelety2-47/+201
2018-06-29IP4 Router Alert option handling for IGMPNeale Ranns1-1/+5
2018-06-28make test: fix profilingKlement Sekera1-1/+1
2018-06-27make test: easy profiling via make test PROFILE=1Klement Sekera2-2/+25
2018-06-26NAT44: fix nat44_ed_not_translate_output_feature (VPP-1329)Matus Fabian1-0/+25
2018-06-26L3DSR fix ip checksum issue and add testHongjun Ni1-0/+6
2018-06-26Add negative tests for leaking across different VRFs - ip4/6Jan Gelety2-31/+172
2018-06-25make test: fix RETRIES when setUpClass throwsKlement Sekera2-2/+25
2018-06-25make test: fix broken interfaces #2Klement Sekera5-86/+84
2018-06-24Revert "Revert "make test: fix broken interfaces""Klement Sekera23-86/+61
2018-06-24Revert "Revert "ipsec: VPP-1316 calculate IP/TCP/UDP inner checksums""Klement Sekera13-574/+634
2018-06-22Revert "ipsec: VPP-1316 calculate IP/TCP/UDP inner checksums"Ole Troan13-634/+574
2018-06-22Revert "make test: fix broken interfaces"Ole Troan23-61/+86
2018-06-22make test: fix broken interfacesKlement Sekera23-86/+61
2018-06-22Python API: Add enum and union support.Ole Troan2-487/+1
2018-06-21test:vxlan over ipv6 testsEyal Bari6-6/+213
2018-06-21ipsec: VPP-1316 calculate IP/TCP/UDP inner checksumsKlement Sekera13-574/+634
2018-06-21Implement DHCPv6 IA NA client (VPP-1094)Juraj Sloboda2-32/+388
2018-06-19Fixed bugs in SRv6 APIPablo Camarillo3-45/+50
2018-06-18Revert "Python API: Add enum and union support."Ole Trøan2-3/+451
2018-06-17Python API: Add enum and union support.Ole Troan2-451/+3
2018-06-15Update DHCPv6 DUID code and fix coverity warningsJuraj Sloboda1-12/+9
2018-06-15NAT44: endpoint dependent mode (VPP-1273)Matus Fabian1-936/+1105
2018-06-14MTU: IP fragmentation added to ip4-rewrite and ip6-rewriteOle Troan1-4/+3
2018-06-11udp: fix for multiple workers and add testFlorin Coras1-0/+74
} return mq; } void svm_msg_q_free (svm_msg_q_t * mq) { svm_queue_free (mq->q); clib_mem_free (mq); } svm_msg_q_msg_t svm_msg_q_alloc_msg_w_ring (svm_msg_q_t * mq, u32 ring_index) { svm_msg_q_msg_t msg; svm_msg_q_ring_t *ring = svm_msg_q_ring_inline (mq, ring_index); ASSERT (ring->cursize < ring->nitems); msg.ring_index = ring - mq->rings; msg.elt_index = ring->tail; ring->tail = (ring->tail + 1) % ring->nitems; clib_atomic_fetch_add (&ring->cursize, 1); return msg; } int svm_msg_q_lock_and_alloc_msg_w_ring (svm_msg_q_t * mq, u32 ring_index, u8 noblock, svm_msg_q_msg_t * msg) { if (noblock) { if (svm_msg_q_try_lock (mq)) return -1; if (PREDICT_FALSE (svm_msg_q_ring_is_full (mq, ring_index))) { svm_msg_q_unlock (mq); return -2; } *msg = svm_msg_q_alloc_msg_w_ring (mq, ring_index); if (PREDICT_FALSE (svm_msg_q_msg_is_invalid (msg))) { svm_msg_q_unlock (mq); return -2; } } else { svm_msg_q_lock (mq); while (svm_msg_q_ring_is_full (mq, ring_index)) svm_msg_q_wait (mq); *msg = svm_msg_q_alloc_msg_w_ring (mq, ring_index); } return 0; } svm_msg_q_msg_t svm_msg_q_alloc_msg (svm_msg_q_t * mq, u32 nbytes) { svm_msg_q_msg_t msg = {.as_u64 = ~0 }; svm_msg_q_ring_t *ring; vec_foreach (ring, mq->rings) { if (ring->elsize < nbytes || ring->cursize == ring->nitems) continue; msg.ring_index = ring - mq->rings; msg.elt_index = ring->tail; ring->tail = (ring->tail + 1) % ring->nitems; clib_atomic_fetch_add (&ring->cursize, 1); break; } return msg; } void * svm_msg_q_msg_data (svm_msg_q_t * mq, svm_msg_q_msg_t * msg) { svm_msg_q_ring_t *ring = svm_msg_q_ring_inline (mq, msg->ring_index); return svm_msg_q_ring_data (ring, msg->elt_index); } void svm_msg_q_free_msg (svm_msg_q_t * mq, svm_msg_q_msg_t * msg) { svm_msg_q_ring_t *ring; ASSERT (vec_len (mq->rings) > msg->ring_index); ring = &mq->rings[msg->ring_index]; if (msg->elt_index == ring->head) { ring->head = (ring->head + 1) % ring->nitems; } else { clib_warning ("message out of order"); /* for now, expect messages to be processed in order */ ASSERT (0); } clib_atomic_fetch_sub (&ring->cursize, 1); } static int svm_msq_q_msg_is_valid (svm_msg_q_t * mq, svm_msg_q_msg_t * msg) { u32 dist1, dist2, tail, head; svm_msg_q_ring_t *ring; if (vec_len (mq->rings) <= msg->ring_index) return 0; ring = &mq->rings[msg->ring_index]; tail = ring->tail; head = ring->head; dist1 = ((ring->nitems + msg->elt_index) - head) % ring->nitems; if (tail == head) dist2 = (ring->cursize == 0) ? 0 : ring->nitems; else dist2 = ((ring->nitems + tail) - head) % ring->nitems; return (dist1 < dist2); } int svm_msg_q_add (svm_msg_q_t * mq, svm_msg_q_msg_t * msg, int nowait) { ASSERT (svm_msq_q_msg_is_valid (mq, msg)); return svm_queue_add (mq->q, (u8 *) msg, nowait); } void svm_msg_q_add_and_unlock (svm_msg_q_t * mq, svm_msg_q_msg_t * msg) { ASSERT (svm_msq_q_msg_is_valid (mq, msg)); svm_queue_add_raw (mq->q, (u8 *) msg); svm_msg_q_unlock (mq); } int svm_msg_q_sub (svm_msg_q_t * mq, svm_msg_q_msg_t * msg, svm_q_conditional_wait_t cond, u32 time) { return svm_queue_sub (mq->q, (u8 *) msg, cond, time); } void svm_msg_q_sub_w_lock (svm_msg_q_t * mq, svm_msg_q_msg_t * msg) { svm_queue_sub_raw (mq->q, (u8 *) msg); } void svm_msg_q_set_consumer_eventfd (svm_msg_q_t * mq, int fd) { mq->q->consumer_evtfd = fd; } void svm_msg_q_set_producer_eventfd (svm_msg_q_t * mq, int fd) { mq->q->producer_evtfd = fd; } int svm_msg_q_alloc_consumer_eventfd (svm_msg_q_t * mq) { int fd; if ((fd = eventfd (0, EFD_NONBLOCK)) < 0) return -1; svm_msg_q_set_consumer_eventfd (mq, fd); return 0; } int svm_msg_q_alloc_producer_eventfd (svm_msg_q_t * mq) { int fd; if ((fd = eventfd (0, EFD_NONBLOCK)) < 0) return -1; svm_msg_q_set_producer_eventfd (mq, fd); return 0; } /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */