summaryrefslogtreecommitdiffstats
path: root/pom.xml
blob: 4ec1b239ae133390d10bfb5e1121f4758d27030d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?xml version="1.0" encoding="UTF-8"?>
<!--
 Copyright (c) 2015 Cisco and/or its affiliates.
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at:

     http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
--><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  <parent>
    <groupId>io.fd.hc2vpp.common</groupId>
    <artifactId>hc2vpp-parent</artifactId>
    <version>1.18.07-SNAPSHOT</version>
    <relativePath>common/hc2vpp-parent</relativePath>
  </parent>

  <groupId>io.fd.hc2vpp</groupId>
  <artifactId>hc2vpp-aggregator</artifactId>
  <version>1.18.07-SNAPSHOT</version>
  <name>hc2vpp</name>
  <packaging>pom</packaging>
  <modelVersion>4.0.0</modelVersion>

  <description>Honeycomb based management agent for VPP</description>

  <scm>
    <url>https://git.fd.io/cgit/hc2vpp/tree/</url>
  </scm>

  <modules>
    <module>common</module>
    <module>vpp-common</module>
    <module>v3po</module>
    <module>ioam</module>
    <module>nsh</module>
    <module>routing</module>
    <module>fib-management</module>
    <module>nat</module>
    <module>lisp</module>
    <module>release-notes</module>
    <module>vpp-integration</module>
    <module>acl</module>
    <module>dhcp</module>
    <module>samples</module>
    <module>vpp-classifier</module>
    <module>l3</module>
    <module>vpp-management</module>
    <module>it</module>
    <module>interface-role</module>
    <module>bgp</module>
    <module>mpls</module>
    <module>srv6</module>
  </modules>
</project>
> <string.h> #include <vppinfra/clib.h> #include <vppinfra/vec.h> #include <vppinfra/hash.h> #include <vppinfra/bitmap.h> #include <vppinfra/fifo.h> #include <vppinfra/time.h> #include <vppinfra/mheap.h> #include <vppinfra/heap.h> #include <vppinfra/pool.h> #include <vppinfra/format.h> #define MMAP_PAGESIZE (4<<10) #define SSVM_N_OPAQUE 7 typedef struct { /* Spin-lock */ volatile u32 lock; volatile u32 owner_pid; int recursion_count; u32 tag; /* for debugging */ /* The allocation arena */ void * heap; /* Segment must be mapped at this address, or no supper */ u64 ssvm_va; /* The actual mmap size */ u64 ssvm_size; u32 master_pid; u32 slave_pid; u8 * name; void * opaque [SSVM_N_OPAQUE]; /* Set when the master application thinks it's time to make the donuts */ volatile u32 ready; /* Needed to make unique MAC addresses, etc. */ u32 master_index; } ssvm_shared_header_t; typedef struct { ssvm_shared_header_t * sh; u64 ssvm_size; u32 my_pid; u32 vlib_hw_if_index; u8 * name; uword requested_va; int i_am_master; u32 per_interface_next_index; u32 * rx_queue; } ssvm_private_t; always_inline void ssvm_lock (ssvm_shared_header_t * h, u32 my_pid, u32 tag) { if (h->owner_pid == my_pid) { h->recursion_count++; return; } while (__sync_lock_test_and_set (&h->lock, 1)) ; h->owner_pid = my_pid; h->recursion_count = 1; h->tag = tag; } always_inline void ssvm_unlock (ssvm_shared_header_t * h) { if (--h->recursion_count == 0) { h->owner_pid = 0; h->tag = 0; CLIB_MEMORY_BARRIER(); h->lock = 0; } } static inline void *ssvm_push_heap (ssvm_shared_header_t *sh) { u8 *oldheap; oldheap = clib_mem_set_heap(sh->heap); return ((void *) oldheap); } static inline void ssvm_pop_heap (void *oldheap) { clib_mem_set_heap(oldheap); } #define foreach_ssvm_api_error \ _(NO_NAME, "No shared segment name", -10) \ _(NO_SIZE, "Size not set (master)", -11) \ _(CREATE_FAILURE, "Create failed", -12) \ _(SET_SIZE, "Set size failed", -13) \ _(MMAP, "mmap failed", -14) \ _(SLAVE_TIMEOUT, "Slave map timeout", -15) typedef enum { #define _(n,s,c) SSVM_API_ERROR_##n = c, foreach_ssvm_api_error #undef _ } ssvm_api_error_enum_t; #define SSVM_API_ERROR_NO_NAME (-10) int ssvm_master_init (ssvm_private_t * ssvm, u32 master_index); int ssvm_slave_init (ssvm_private_t * ssvm, int timeout_in_seconds); #endif /* __included_ssvm_h__ */