Commit bc5e3031 authored by Nikos Makris's avatar Nikos Makris

Added proto_agent files for a simple message exchange in oaisim

parent e508be85
This diff is collapsed.
/*******************************************************************************
OpenAirInterface
Copyright(c) 1999 - 2014 Eurecom
OpenAirInterface is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenAirInterface is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with OpenAirInterface.The full GNU General Public License is
included in this distribution in the file called "COPYING". If not,
see <http://www.gnu.org/licenses/>.
Contact Information
OpenAirInterface Admin: openair_admin@eurecom.fr
OpenAirInterface Tech : openair_tech@eurecom.fr
OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France.
*******************************************************************************/
/*! \file proto_agent.h
* \brief top level protocol agent
* \author Navid Nikaein and Xenofon Foukas
* \date 2016
* \version 0.1
*/
#ifndef PROTO_AGENT_H_
#define PROTO_AGENT_H_
#include "ENB_APP/enb_config.h" // for enb properties
#include "proto_agent_common.h"
int proto_agent_start(mid_t mod_id, const Enb_properties_array_t* enb_properties);
int proto_server_start(mid_t mod_id, const Enb_properties_array_t* enb_properties);
int proto_agent_stop(mid_t mod_id);
void *proto_agent_task(void *args);
#endif
/*******************************************************************************
OpenAirInterface
Copyright(c) 1999 - 2014 Eurecom
OpenAirInterface is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenAirInterface is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with OpenAirInterface.The full GNU General Public License is
included in this distribution in the file called "COPYING". If not,
see <http://www.gnu.org/licenses/>.
Contact Information
OpenAirInterface Admin: openair_admin@eurecom.fr
OpenAirInterface Tech : openair_tech@eurecom.fr
OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France.
*******************************************************************************/
/*! \file enb_agent_async.c
* \brief channel implementation for async interface
* \author Xenofon Foukas
* \date 2016
* \version 0.1
*/
#include "proto_agent_async.h"
#include "proto_agent_defs.h"
#include "log.h"
proto_agent_async_channel_t * proto_server_async_channel_info(mid_t mod_id, char *dst_ip, uint16_t dst_port) {
proto_agent_async_channel_t *channel;
channel = (proto_agent_async_channel_t *) malloc(sizeof(proto_agent_channel_t));
if (channel == NULL)
goto error;
channel->enb_id = mod_id;
/*Create a socket*/
printf("Starting async server\n");
new_thread(new_link_server, (void *) &dst_port);
channel->link = (void *) &dst_port;
printf("Started async server\n");
if (channel->link == NULL) goto error;
LOG_I(PROTO_AGENT,"starting proto agent server for module id %d on ipv4 %s, port %d\n",
channel->enb_id,
dst_ip,
dst_port);
/*
* create a message queue
*/
channel->send_queue = new_message_queue();
if (channel->send_queue == NULL) goto error;
channel->receive_queue = new_message_queue();
if (channel->receive_queue == NULL) goto error;
/*
* create a link manager
*/
channel->manager = create_link_manager(channel->send_queue, channel->receive_queue, channel->link);
if (channel->manager == NULL) goto error;
return channel;
error:
LOG_I(PROTO_AGENT,"there was an error\n");
return 1;
}
proto_agent_async_channel_t * proto_agent_async_channel_info(mid_t mod_id, char *dst_ip, uint16_t dst_port) {
proto_agent_async_channel_t *channel;
channel = (proto_agent_async_channel_t *) malloc(sizeof(proto_agent_channel_t));
if (channel == NULL)
goto error;
channel->enb_id = mod_id;
/*Create a socket*/
channel->link = new_link_client(dst_ip, dst_port);
if (channel->link == NULL) goto error;
LOG_I(PROTO_AGENT,"starting proto agent client for module id %d on ipv4 %s, port %d\n",
channel->enb_id,
dst_ip,
dst_port);
/*
* create a message queue
*/
channel->send_queue = new_message_queue();
if (channel->send_queue == NULL) goto error;
channel->receive_queue = new_message_queue();
if (channel->receive_queue == NULL) goto error;
/*
* create a link manager
*/
channel->manager = create_link_manager(channel->send_queue, channel->receive_queue, channel->link);
if (channel->manager == NULL) goto error;
return channel;
error:
LOG_I(PROTO_AGENT,"there was an error\n");
return 1;
}
int proto_agent_async_msg_send(void *data, int size, int priority, void *channel_info) {
proto_agent_async_channel_t *channel;
channel = (proto_agent_channel_t *)channel_info;
return message_put(channel->send_queue, data, size, priority);
}
int proto_agent_async_msg_recv(void **data, int *size, int *priority, void *channel_info) {
proto_agent_async_channel_t *channel;
channel = (proto_agent_async_channel_t *)channel_info;
return message_get(channel->receive_queue, data, size, priority);
}
void proto_agent_async_release(proto_agent_channel_t *channel) {
proto_agent_async_channel_t *channel_info;
channel_info = (proto_agent_async_channel_t *) channel->channel_info;
destroy_link_manager(channel_info->manager);
destroy_message_queue(channel_info->send_queue);
destroy_message_queue(channel_info->receive_queue);
close_link(channel_info->link);
free(channel_info);
}
/*******************************************************************************
OpenAirInterface
Copyright(c) 1999 - 2014 Eurecom
OpenAirInterface is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenAirInterface is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with OpenAirInterface.The full GNU General Public License is
included in this distribution in the file called "COPYING". If not,
see <http://www.gnu.org/licenses/>.
Contact Information
OpenAirInterface Admin: openair_admin@eurecom.fr
OpenAirInterface Tech : openair_tech@eurecom.fr
OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France.
*******************************************************************************/
/*! \file enb_agent_async.h
* \brief channel implementation for async interface
* \author Xenofon Foukas
* \date 2016
* \version 0.1
*/
#ifndef PROTO_AGENT_ASYNC_H_
#define PROTO_AGENT_ASYNC_H_
#include "proto_agent_net_comm.h"
typedef struct {
mid_t enb_id;
socket_link_t *link;
message_queue_t *send_queue;
message_queue_t *receive_queue;
link_manager_t *manager;
} proto_agent_async_channel_t;
proto_agent_async_channel_t * proto_agent_async_channel_info(mid_t mod_id, char *dst_ip, uint16_t dst_port);
proto_agent_async_channel_t * proto_server_async_channel_info(mid_t mod_id, char *dst_ip, uint16_t dst_port);
int proto_agent_async_msg_send(void *data, int size, int priority, void *channel_info);
int proto_agent_async_msg_recv(void **data, int *size, int *priority, void *channel_info);
void proto_agent_async_release(proto_agent_channel_t *channel);
#endif /*PROTO_AGENT_ASYNC_H_*/
This diff is collapsed.
This diff is collapsed.
/*******************************************************************************
OpenAirInterface
Copyright(c) 1999 - 2016 Eurecom
OpenAirInterface is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenAirInterface is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with OpenAirInterface.The full GNU General Public License is
included in this distribution in the file called "COPYING". If not,
see <http://www.gnu.org/licenses/>.
Contact Information
OpenAirInterface Admin: openair_admin@eurecom.fr
OpenAirInterface Tech : openair_tech@eurecom.fr
OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France.
*******************************************************************************/
/*! \file enb_agent_defs.h
* \brief enb agent common definitions
* \author Navid Nikaein and Xenofon Foukas
* \date 2016
* \version 0.1
*/
#ifndef PROTO_AGENT_DEFS_H_
#define PROTO_AGENT_DEFS_H_
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <string.h>
#include "UTIL/ASYNC_IF/link_manager.h"
#define NUM_MAX_ENB 2
#define NUM_MAX_UE 2048
#define DEFAULT_PROTO_AGENT_IPv4_ADDRESS "127.0.0.1"
#define DEFAULT_PROTO_AGENT_PORT 2210
#define DEFAULT_PROTO_AGENT_CACHE "/mnt/oai_agent_cache"
typedef enum {
PROTO_AGENT_DEFAULT=0,
ENB_AGENT_PHY=1,
ENB_AGENT_MAC=2,
ENB_AGENT_RLC=3,
ENB_AGENT_PDCP=4,
ENB_AGENT_RRC=5,
ENB_AGENT_S1AP=6,
ENB_AGENT_GTP=7,
ENB_AGENT_X2AP=8,
ENB_AGENT_MAX=9,
} agent_id_t;
typedef enum {
/* no action */
ENB_AGENT_ACTION_NONE = 0x0,
/* send action */
ENB_AGENT_ACTION_SEND = 0x1,
/* apply action */
ENB_AGENT_ACTION_APPLY = 0x2,
/* clear action */
ENB_AGENT_ACTION_CLEAR = 0x4,
/* write action */
ENB_AGENT_ACTION_WRITE = 0x8,
/* filter action */
ENB_AGENT_ACTION_FILTER = 0x10,
/* preprocess action */
ENB_AGENT_ACTION_PREPROCESS = 0x20,
/* meter action */
ENB_AGENT_ACTION_METER = 0x40,
/* Max number of states available */
ENB_AGENT_ACTION_MAX = 0x7f,
} agent_action_t;
typedef enum {
RAN_LTE_OAI= 0,
/* Max number of states available */
RAN_NAME_MAX = 0x7f,
} ran_name_t;
typedef uint8_t xid_t;
typedef uint8_t mid_t; // module or enb id
typedef uint8_t lcid_t;
typedef int32_t err_code_t;
typedef struct {
/* general info */
/* stats */
uint32_t total_rx_msg;
uint32_t total_tx_msg;
uint32_t rx_msg[NUM_MAX_ENB];
uint32_t tx_msg[NUM_MAX_ENB];
}proto_agent_info_t;
typedef struct {
mid_t enb_id;
proto_agent_info_t agent_info;
}proto_agent_instance_t;
#endif
/*******************************************************************************
OpenAirInterface
Copyright(c) 1999 - 2014 Eurecom
OpenAirInterface is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenAirInterface is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with OpenAirInterface.The full GNU General Public License is
included in this distribution in the file called "COPYING". If not,
see <http://www.gnu.org/licenses/>.
Contact Information
OpenAirInterface Admin: openair_admin@eurecom.fr
OpenAirInterface Tech : openair_tech@eurecom.fr
OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France.
*******************************************************************************/
/*! \file enb_agent_handler.c
* \brief enb agent tx and rx message handler
* \author Navid Nikaein and Xenofon Foukas
* \date 2016
* \version 0.1
*/
#include "proto_agent_common.h"
//#include "enb_agent_mac.h" // Do we need this?
#include "log.h"
#include "assertions.h"
proto_agent_message_decoded_callback agent_messages_callback[][3] = {
{proto_agent_hello, 0, 0}, /*PROTOCOL__PROGRAN_MESSAGE__MSG_HELLO_MSG*/
};
proto_agent_message_destruction_callback message_destruction_callback[] = {
proto_agent_destroy_hello,
};
static const char *proto_agent_direction2String[] = {
"", /* not_set */
"originating message", /* originating message */
"successfull outcome", /* successfull outcome */
"unsuccessfull outcome", /* unsuccessfull outcome */
};
Protocol__FlexsplitMessage* proto_agent_handle_message (mid_t mod_id,
uint8_t *data,
uint32_t size){
Protocol__FlexsplitMessage *decoded_message, *reply_message;
err_code_t err_code;
DevAssert(data != NULL);
if (proto_agent_deserialize_message(data, size, &decoded_message) < 0) {
err_code= PROTOCOL__FLEXSPLIT_ERR__MSG_DECODING;
goto error;
}
// Undestand why these calculations take place
if ((decoded_message->msg_case > sizeof(agent_messages_callback) / (3*sizeof(proto_agent_message_decoded_callback))) ||
(decoded_message->msg_dir > PROTOCOL__FLEXSPLIT_DIRECTION__UNSUCCESSFUL_OUTCOME)){
err_code= PROTOCOL__FLEXSPLIT_ERR__MSG_NOT_HANDLED;
goto error;
}
if (agent_messages_callback[decoded_message->msg_case-1][decoded_message->msg_dir-1] == NULL) {
err_code= PROTOCOL__FLEXSPLIT_ERR__MSG_NOT_SUPPORTED;
goto error;
}
err_code = ((*agent_messages_callback[decoded_message->msg_case-1][decoded_message->msg_dir-1])(mod_id, (void *) decoded_message, &reply_message));
if ( err_code < 0 ){
goto error;
} else if (err_code == 1) { //If err_code > 1, we do not want to dispose the message yet
protocol__flexsplit_message__free_unpacked(decoded_message, NULL);
}
return reply_message;
error:
LOG_E(PROTO_AGENT,"errno %d occured\n",err_code);
return NULL;
}
void * proto_agent_pack_message(Protocol__FlexsplitMessage *msg,
uint32_t * size){
void * buffer;
err_code_t err_code = PROTOCOL__FLEXSPLIT_ERR__NO_ERR;
if (proto_agent_serialize_message(msg, &buffer, size) < 0 ) {
err_code = PROTOCOL__FLEXSPLIT_ERR__MSG_ENCODING;
goto error;
}
// free the msg --> later keep this in the data struct and just update the values
//TODO call proper destroy function
err_code = ((*message_destruction_callback[msg->msg_case-1])(msg));
DevAssert(buffer !=NULL);
LOG_D(PROTO_AGENT,"Serilized the enb mac stats reply (size %d)\n", *size);
return buffer;
error :
LOG_E(PROTO_AGENT,"errno %d occured\n",err_code);
return NULL;
}
Protocol__FlexsplitMessage* proto_agent_process_timeout(long timer_id, void* timer_args){
struct proto_agent_timer_element_s *found = get_timer_entry(timer_id);
if (found == NULL ) goto error;
// LOG_I(PROTO_AGENT, "Found the entry (%p): timer_id is 0x%lx 0x%lx\n", found, timer_id, found->timer_id);
if (timer_args == NULL)
LOG_W(PROTO_AGENT,"null timer args\n");
// return found->cb(timer_args);
return 1;
error:
LOG_E(PROTO_AGENT, "can't get the timer element\n");
return TIMER_ELEMENT_NOT_FOUND;
}
err_code_t proto_agent_destroy_flexsplit_message(Protocol__FlexsplitMessage *msg) {
return ((*message_destruction_callback[msg->msg_case-1])(msg));
}
/*******************************************************************************
OpenAirInterface
Copyright(c) 1999 - 2016 Eurecom
OpenAirInterface is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenAirInterface is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with OpenAirInterface.The full GNU General Public License is
included in this distribution in the file called "COPYING". If not,
see <http://www.gnu.org/licenses/>.
Contact Information
OpenAirInterface Admin: openair_admin@eurecom.fr
OpenAirInterface Tech : openair_tech@eurecom.fr
OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France.
*******************************************************************************/
/*! \file enb_agent_net_comm.c
* \brief enb agent network interface abstraction
* \author Xenofon Foukas
* \date 2016
* \version 0.1
*/
#include "proto_agent_net_comm.h"
#include "log.h"
proto_agent_channel_t *agent_channel[NUM_MAX_ENB][ENB_AGENT_MAX];
proto_agent_channel_instance_t channel_instance;
int proto_agent_channel_id = 0;
int proto_agent_msg_send(mid_t mod_id, agent_id_t agent_id, void *data, int size, int priority) {
/*Check if agent id is valid*/
if (agent_id >= ENB_AGENT_MAX || agent_id < 0) {
goto error;
}
proto_agent_channel_t *channel;
channel = agent_channel[mod_id][agent_id];
/*Check if agent has a channel registered*/
if (channel == NULL) {
goto error;
}
return channel->msg_send(data, size, priority, channel->channel_info);
error:
LOG_E(PROTO_AGENT, "No channel registered for agent with id %d\n", agent_id);
return -1;
}
int proto_agent_msg_recv(mid_t mod_id, agent_id_t agent_id, void **data, int *size, int *priority) {
/*Check if agent id is valid*/
if (agent_id >= ENB_AGENT_MAX || agent_id < 0) {
goto error;
}
proto_agent_channel_t *channel;
channel = agent_channel[mod_id][agent_id];
/*Check if agent has a channel registered*/
if (channel == NULL) {
goto error;
}
return channel->msg_recv(data, size, priority, channel->channel_info);
error:
LOG_E(PROTO_AGENT, "No channel registered for agent with id %d\n", agent_id);
return -1;
}
int proto_agent_register_channel(mid_t mod_id, proto_agent_channel_t *channel, agent_id_t agent_id) {
int i;
if (channel == NULL) {
return -1;
}
if (agent_id == ENB_AGENT_MAX) {
for (i = 0; i < ENB_AGENT_MAX; i++) {
agent_channel[mod_id][i] = channel;
}
} else {
agent_channel[mod_id][agent_id] = channel;
}
return 0;
}
void proto_agent_unregister_channel(mid_t mod_id, agent_id_t agent_id) {
int i;
if (agent_id == ENB_AGENT_MAX) {
for (i = 0; i < ENB_AGENT_MAX; i++) {
agent_channel[mod_id][i] = NULL;
}
} else {
agent_channel[mod_id][agent_id] = NULL;
}
}
int proto_agent_create_channel(void *channel_info,
int (*msg_send)(void *data, int size, int priority, void *channel_info),
int (*msg_recv)(void **data, int *size, int *priority, void *channel_info),
void (*release)(proto_agent_channel_t *channel)) {
int channel_id = ++proto_agent_channel_id;
proto_agent_channel_t *channel = (proto_agent_channel_t *) malloc(sizeof(proto_agent_channel_t));
channel->channel_id = channel_id;
channel->channel_info = channel_info;
channel->msg_send = msg_send;
channel->msg_recv = msg_recv;
channel->release = release;
/*element should be a real pointer*/
RB_INSERT(proto_agent_channel_map, &channel_instance.proto_agent_head, channel);
LOG_I(PROTO_AGENT,"Created a new channel with id 0x%lx\n", channel->channel_id);
return channel_id;
}
int proto_agent_destroy_channel(int channel_id) {
int i, j;
/*Check to see if channel exists*/
struct proto_agent_channel_s *e = NULL;
struct proto_agent_channel_s search;
memset(&search, 0, sizeof(struct proto_agent_channel_s));
e = RB_FIND(proto_agent_channel_map, &channel_instance.proto_agent_head, &search);
if (e == NULL) {
return -1;
}
/*Unregister the channel from all agents*/
for (i = 0; i < NUM_MAX_ENB; i++) {
for (j = 0; j < ENB_AGENT_MAX; j++) {
if (agent_channel[i][j] != NULL) {
if (agent_channel[i][j]->channel_id == e->channel_id) {
agent_channel[i][j] == NULL;
}
}
}
}
/*Remove the channel from the tree and free memory*/
RB_REMOVE(proto_agent_channel_map, &channel_instance.proto_agent_head, e);
e->release(e);
free(e);
return 0;
}
err_code_t proto_agent_init_channel_container(void) {
int i, j;
LOG_I(PROTO_AGENT, "init RB tree for channel container\n");
RB_INIT(&channel_instance.proto_agent_head);
for (i = 0; i < NUM_MAX_ENB; i++) {
for (j = 0; j < ENB_AGENT_MAX; j++) {
agent_channel[i][j] == NULL;
}
}
return 0;
}
RB_GENERATE(proto_agent_channel_map,proto_agent_channel_s, entry, proto_agent_compare_channel);
int proto_agent_compare_channel(struct proto_agent_channel_s *a, struct proto_agent_channel_s *b) {
if (a->channel_id < b->channel_id) return -1;
if (a->channel_id > b->channel_id) return 1;
// equal timers
return 0;
}
proto_agent_channel_t * get_channel(int channel_id) {
struct proto_agent_channel_s search;
memset(&search, 0, sizeof(struct proto_agent_channel_s));
search.channel_id = channel_id;
return RB_FIND(proto_agent_channel_map, &channel_instance.proto_agent_head, &search);
}
/*******************************************************************************
OpenAirInterface
Copyright(c) 1999 - 2016 Eurecom
OpenAirInterface is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenAirInterface is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with OpenAirInterface.The full GNU General Public License is
included in this distribution in the file called "COPYING". If not,
see <http://www.gnu.org/licenses/>.
Contact Information
OpenAirInterface Admin: openair_admin@eurecom.fr
OpenAirInterface Tech : openair_tech@eurecom.fr
OpenAirInterface Dev : openair4g-devel@lists.eurecom.fr
Address : Eurecom, Compus SophiaTech 450, route des chappes, 06451 Biot, France.
*******************************************************************************/
/*! \file enb_agent_net_comm.h
* \brief enb agent network interface abstraction
* \autho Xenofon Foukas
* \date 2016
* \version 0.1
*/
#ifndef PROTO_AGENT_NET_COMM_H_
#define PROTO_AGENT_NET_COMM_H_
#include "proto_agent_defs.h"
#include "tree.h"
/*Channel related information used for Tx/Rx of protocol messages*/
typedef struct proto_agent_channel_s {
RB_ENTRY(proto_agent_channel_s) entry;
int channel_id;
void *channel_info;
/*Callbacks for channel message Tx and Rx*/
int (*msg_send)(void *data, int size, int priority, void *channel_info);
int (*msg_recv)(void **data, int *size, int *priority, void *channel_info);
void (*release)(struct proto_agent_channel_s *channel);
} proto_agent_channel_t;
typedef struct proto_agent_channel_instance_s{
RB_HEAD(proto_agent_channel_map, proto_agent_channel_s) proto_agent_head;
} proto_agent_channel_instance_t;
/*Send and receive messages using the channel registered for a specific agent*/
int proto_agent_msg_send(mid_t mod_id, agent_id_t agent_id, void *data, int size, int priority);
int proto_agent_msg_recv(mid_t mod_id, agent_id_t agent_id, void **data, int *size, int *priority);
/*Register a channel to an agent. Use ENB_AGENT_MAX to register the
*same channel to all agents*/
int proto_agent_register_channel(mid_t mod_id, proto_agent_channel_t *channel, agent_id_t agent_id);
/*Unregister the current channel of an agent. Use ENB_AGENT_MAX to unregister all channels*/
void proto_agent_unregister_channel(mid_t mod_id, agent_id_t agent_id);
/*Create a new channel. Returns the id of the new channel or negative number otherwise*/
int proto_agent_create_channel(void *channel_info,
int (*msg_send)(void *data, int size, int priority, void *channel_info),
int (*msg_recv)(void **data, int *size, int *priority, void *channel_info),
void (*release)(proto_agent_channel_t *channel));
/*Unregister a channel from all agents and destroy it. Returns 0 in case of success*/
int proto_agent_destroy_channel(int channel_id);
/*Return an agent communication channel based on its id*/
proto_agent_channel_t * get_channel(int channel_id);
/*Should be called before performing any channel operations*/
err_code_t proto_agent_init_channel_container(void);
int proto_agent_compare_channel(struct proto_agent_channel_s *a, struct proto_agent_channel_s *b);
/* RB_PROTOTYPE is for .h files */
RB_PROTOTYPE(proto_agent_channel_map, proto_agent_channel_s, entry, proto_agent_compare_channel);
#endif /*ENB_AGENT_COMM_H_*/
##### paths #####
BINDIR := ../../bin
INCDIR := ../../inc
OBJDIR := ../../obj
SRCDIR := ../../src
##### misc #####
QUIETLY := 1>/dev/null 2>/dev/null
VERSION_NUMBER := 1
MINOR_NUMBER := 0
RELEASE_NUMBER := 0
##### sources, objects and libraries #####
BINNAME := liblfds700
ARFILENAME := $(BINNAME).a
ARPATHNAME := $(BINDIR)/$(ARFILENAME)
SOBASENAME := $(BINNAME).so
SONAME := $(SOBASENAME).$(VERSION_NUMBER)
SOFILENAME := $(SONAME).$(MINOR_NUMBER).$(RELEASE_NUMBER)
SOPATHNAME := $(BINDIR)/$(SOFILENAME)
INCNAME := $(INCDIR)/$(BINNAME).h
SRCDIRS := lfds700_btree_addonly_unbalanced lfds700_freelist lfds700_hash_addonly lfds700_list_addonly_ordered_singlylinked lfds700_list_addonly_singlylinked_unordered lfds700_misc lfds700_queue lfds700_queue_bounded_singleconsumer_singleproducer lfds700_ringbuffer lfds700_stack
SOURCES := lfds700_hash_addonly_cleanup.c lfds700_hash_addonly_get.c lfds700_hash_addonly_init.c lfds700_hash_addonly_insert.c lfds700_hash_addonly_iterate.c lfds700_hash_addonly_query.c \
lfds700_list_addonly_ordered_singlylinked_cleanup.c lfds700_list_addonly_ordered_singlylinked_get.c lfds700_list_addonly_ordered_singlylinked_init.c lfds700_list_addonly_ordered_singlylinked_insert.c lfds700_list_addonly_ordered_singlylinked_query.c \
lfds700_list_addonly_singlylinked_unordered_cleanup.c lfds700_list_addonly_singlylinked_unordered_get.c lfds700_list_addonly_singlylinked_unordered_init.c lfds700_list_addonly_singlylinked_unordered_insert.c lfds700_list_addonly_singlylinked_unordered_query.c \
lfds700_btree_addonly_unbalanced_cleanup.c lfds700_btree_addonly_unbalanced_get.c lfds700_btree_addonly_unbalanced_init.c lfds700_btree_addonly_unbalanced_insert.c lfds700_btree_addonly_unbalanced_query.c \
lfds700_freelist_cleanup.c lfds700_freelist_init.c lfds700_freelist_pop.c lfds700_freelist_push.c lfds700_freelist_query.c \
lfds700_misc_cleanup.c lfds700_misc_globals.c lfds700_misc_init.c lfds700_misc_prng.c lfds700_misc_query.c \
lfds700_queue_cleanup.c lfds700_queue_dequeue.c lfds700_queue_enqueue.c lfds700_queue_init.c lfds700_queue_query.c \
lfds700_queue_bounded_singleconsumer_singleproducer_cleanup.c lfds700_queue_bounded_singleconsumer_singleproducer_dequeue.c lfds700_queue_bounded_singleconsumer_singleproducer_enqueue.c lfds700_queue_bounded_singleconsumer_singleproducer_init.c lfds700_queue_bounded_singleconsumer_singleproducer_query.c \
lfds700_ringbuffer_cleanup.c lfds700_ringbuffer_init.c lfds700_ringbuffer_query.c lfds700_ringbuffer_read.c lfds700_ringbuffer_write.c \
lfds700_stack_cleanup.c lfds700_stack_init.c lfds700_stack_pop.c lfds700_stack_push.c lfds700_stack_query.c
OBJECTS := $(patsubst %.c,$(OBJDIR)/%.o,$(notdir $(SOURCES)))
SYSLIBS :=
##### default paths fix up #####
CPATH := $(subst : ,:,$(SRCDIR):$(INCDIR))
##### tools #####
MAKE := make
MFLAGS :=
DG := gcc
DGFLAGS := -MM -std=gnu89
CC := gcc
CFBASE := -c -fno-strict-aliasing -std=gnu89 -Wall -Werror -Wno-unknown-pragmas -Wno-unused-but-set-variable -Wno-unused-variable
CFCOV := -O0 -ggdb -DCOVERAGE -fprofile-arcs -ftest-coverage
CFDBG := -O0 -ggdb -D_DEBUG
CFPROF := -O0 -ggdb -DPROF -pg
CFREL := -O2 -DNDEBUG -finline-functions
CFTSAN := -O0 -ggdb -DTSAN -fsanitize=thread -fPIC
CFBARE := -ffreestanding -nodefaultlibs -nostdinc -nostdlib
AR := ar
AFLAGS := -rcs
LD := gcc
LFBASE := -pthread -shared -std=gnu89 -Wl,-soname,$(SONAME) -o $(SOPATHNAME) -Wall -Werror
LFCOV := -O0 -fprofile-arcs -ftest-coverage
LFDBG := -O0 -ggdb
LFPROF := -O0 -pg
LFREL := -O2 -s -finline-functions
LFTSAN := -O0 -fsanitize=thread -fPIC
LFBARE := -ffreestanding -nodefaultlibs -nostdinc -nostdlib
##### CPU variants #####
GCCARCH := native
CFBASE += -march=$(GCCARCH)
##### build variants #####
ifeq ($(findstring so,$(MAKECMDGOALS)),so)
CFBASE += -fPIC
endif
CFLAGS += $(CFBASE)
LFLAGS += $(LFBASE)
ifeq ($(MAKECMDGOALS),)
CFLAGS += $(CFDBG)
LFLAGS += $(LFDBG)
endif
ifeq ($(findstring cov,$(MAKECMDGOALS)),cov)
CFLAGS += $(CFCOV)
LFLAGS += $(LFCOV)
SYSLIBS += -lgcov
endif
ifeq ($(findstring dbg,$(MAKECMDGOALS)),dbg)
CFLAGS += $(CFDBG)
LFLAGS += $(LFDBG)
endif
ifeq ($(findstring prof,$(MAKECMDGOALS)),prof)
CFLAGS += $(CFPROF)
LFLAGS += $(LFPROF)
endif
ifeq ($(findstring rel,$(MAKECMDGOALS)),rel)
CFLAGS += $(CFREL)
LFLAGS += $(LFREL)
endif
ifeq ($(findstring tsan,$(MAKECMDGOALS)),tsan)
CFLAGS += $(CFTSAN)
LFLAGS += $(LFTSAN)
endif
ifeq ($(findstring b_,$(MAKECMDGOALS)),b_)
CFLAGS += $(CFBARE)
LFLAGS += $(CFBARE)
endif
##### search paths #####
vpath %.c $(patsubst %,$(SRCDIR)/%:,$(SRCDIRS))
##### implicit rules #####
$(OBJDIR)/%.o : %.c
$(DG) $(DGFLAGS) $< >$(OBJDIR)/$*.d
$(CC) $(CFLAGS) -o $@ $<
##### explicit rules #####
$(ARPATHNAME) : $(OBJECTS)
$(AR) $(AFLAGS) $(ARPATHNAME) $(OBJECTS)
$(SOPATHNAME) : $(OBJECTS)
$(LD) $(LFLAGS) $(OBJECTS) -o $(SOPATHNAME)
@ln -fs $(SOFILENAME) $(BINDIR)/$(SONAME)
@ln -fs $(SOFILENAME) $(BINDIR)/$(SOBASENAME)
##### phony #####
.PHONY : clean bare_ar_cov bare_ar_dbg bare_ar_prof bare_ar_rel bare_ar_tsan bare_so_cov bare_so_dbg bare_so_prof bare_so_rel bare_so_tsan hosted_ar_cov hosted_ar_dbg hosted_ar_prof hosted_ar_rel hosted_ar_tsan hosted_so_cov hosted_so_dbg hosted_so_prof hosted_so_rel hosted_so_tsan
clean :
@rm -f $(BINDIR)/* $(OBJDIR)/*
bare_ar_cov : $(ARPATHNAME) # bare, archive (.a), coverage
bare_ar_dbg : $(ARPATHNAME) # bare, archive (.a), debug
bare_ar_prof : $(ARPATHNAME) # bare, archive (.a), profiling
bare_ar_rel : $(ARPATHNAME) # bare, archive (.a), release
bare_ar_tsan : $(ARPATHNAME) # bare, archive (.a), thread sanitizer
bare_so_cov : $(SOPATHNAME) # bare, shared (.so), coverage
bare_so_dbg : $(SOPATHNAME) # bare, shared (.so), debug
bare_so_prof : $(SOPATHNAME) # bare, shared (.so), profiling
bare_so_rel : $(SOPATHNAME) # bare, shared (.so), release
bare_so_tsan : $(SOPATHNAME) # bare, shared (.so), thread sanitizer
hosted_ar_cov : $(ARPATHNAME) # hosted implementation, archive (.a), coverage
hosted_ar_dbg : $(ARPATHNAME) # hosted implementation, archive (.a), debug
hosted_ar_prof : $(ARPATHNAME) # hosted implementation, archive (.a), profiling
hosted_ar_rel : $(ARPATHNAME) # hosted implementation, archive (.a), release
hosted_ar_tsan : $(ARPATHNAME) # hosted implementation, archive (.a), thread sanitizer
hosted_so_cov : $(SOPATHNAME) # hosted implementation, shared (.so), coverage
hosted_so_dbg : $(SOPATHNAME) # hosted implementation, shared (.so), debug
hosted_so_prof : $(SOPATHNAME) # hosted implementation, shared (.so), profiling
hosted_so_rel : $(SOPATHNAME) # hosted implementation, shared (.so), release
hosted_so_tsan : $(SOPATHNAME) # hosted implementation, shared (.so), thread sanitizer
##### dependencies #####
-include $(DEPENDS)
##### notes #####
# TRD : we use -std=gnu89 for C++ style comments
# hosted implementation differs from bare simply in that <assert.h> ends up being included
lib-y :=
lib-y += ../../src/lfds700_btree_addonly_unbalanced/lfds700_btree_addonly_unbalanced_cleanup.o
lib-y += ../../src/lfds700_btree_addonly_unbalanced/lfds700_btree_addonly_unbalanced_get.o
lib-y += ../../src/lfds700_btree_addonly_unbalanced/lfds700_btree_addonly_unbalanced_init.o
lib-y += ../../src/lfds700_btree_addonly_unbalanced/lfds700_btree_addonly_unbalanced_insert.o
lib-y += ../../src/lfds700_btree_addonly_unbalanced/lfds700_btree_addonly_unbalanced_query.o
lib-y += ../../src/lfds700_freelist/lfds700_freelist_cleanup.o
lib-y += ../../src/lfds700_freelist/lfds700_freelist_init.o
lib-y += ../../src/lfds700_freelist/lfds700_freelist_pop.o
lib-y += ../../src/lfds700_freelist/lfds700_freelist_push.o
lib-y += ../../src/lfds700_freelist/lfds700_freelist_query.o
lib-y += ../../src/lfds700_hash_addonly/lfds700_hash_addonly_cleanup.o
lib-y += ../../src/lfds700_hash_addonly/lfds700_hash_addonly_get.o
lib-y += ../../src/lfds700_hash_addonly/lfds700_hash_addonly_init.o
lib-y += ../../src/lfds700_hash_addonly/lfds700_hash_addonly_insert.o
lib-y += ../../src/lfds700_hash_addonly/lfds700_hash_addonly_iterate.o
lib-y += ../../src/lfds700_hash_addonly/lfds700_hash_addonly_query.o
lib-y += ../../src/lfds700_list_addonly_ordered_singlylinked/lfds700_list_addonly_ordered_singlylinked_cleanup.o
lib-y += ../../src/lfds700_list_addonly_ordered_singlylinked/lfds700_list_addonly_ordered_singlylinked_get.o
lib-y += ../../src/lfds700_list_addonly_ordered_singlylinked/lfds700_list_addonly_ordered_singlylinked_init.o
lib-y += ../../src/lfds700_list_addonly_ordered_singlylinked/lfds700_list_addonly_ordered_singlylinked_insert.o
lib-y += ../../src/lfds700_list_addonly_ordered_singlylinked/lfds700_list_addonly_ordered_singlylinked_query.o
lib-y += ../../src/lfds700_list_addonly_singlylinked_unordered/lfds700_list_addonly_singlylinked_unordered_cleanup.o
lib-y += ../../src/lfds700_list_addonly_singlylinked_unordered/lfds700_list_addonly_singlylinked_unordered_get.o
lib-y += ../../src/lfds700_list_addonly_singlylinked_unordered/lfds700_list_addonly_singlylinked_unordered_init.o
lib-y += ../../src/lfds700_list_addonly_singlylinked_unordered/lfds700_list_addonly_singlylinked_unordered_insert.o
lib-y += ../../src/lfds700_list_addonly_singlylinked_unordered/lfds700_list_addonly_singlylinked_unordered_query.o
lib-y += ../../src/lfds700_misc/lfds700_misc_cleanup.o
lib-y += ../../src/lfds700_misc/lfds700_misc_globals.o
lib-y += ../../src/lfds700_misc/lfds700_misc_init.o
lib-y += ../../src/lfds700_misc/lfds700_misc_prng.o
lib-y += ../../src/lfds700_misc/lfds700_misc_query.o
lib-y += ../../src/lfds700_queue/lfds700_queue_cleanup.o
lib-y += ../../src/lfds700_queue/lfds700_queue_dequeue.o
lib-y += ../../src/lfds700_queue/lfds700_queue_enqueue.o
lib-y += ../../src/lfds700_queue/lfds700_queue_init.o
lib-y += ../../src/lfds700_queue/lfds700_queue_query.o
lib-y += ../../src/lfds700_queue_bounded_singleconsumer_singleproducer/lfds700_queue_bounded_singleconsumer_singleproducer_cleanup.o
lib-y += ../../src/lfds700_queue_bounded_singleconsumer_singleproducer/lfds700_queue_bounded_singleconsumer_singleproducer_dequeue.o
lib-y += ../../src/lfds700_queue_bounded_singleconsumer_singleproducer/lfds700_queue_bounded_singleconsumer_singleproducer_enqueue.o
lib-y += ../../src/lfds700_queue_bounded_singleconsumer_singleproducer/lfds700_queue_bounded_singleconsumer_singleproducer_init.o
lib-y += ../../src/lfds700_queue_bounded_singleconsumer_singleproducer/lfds700_queue_bounded_singleconsumer_singleproducer_query.o
lib-y += ../../src/lfds700_ringbuffer/lfds700_ringbuffer_cleanup.o
lib-y += ../../src/lfds700_ringbuffer/lfds700_ringbuffer_init.o
lib-y += ../../src/lfds700_ringbuffer/lfds700_ringbuffer_query.o
lib-y += ../../src/lfds700_ringbuffer/lfds700_ringbuffer_read.o
lib-y += ../../src/lfds700_ringbuffer/lfds700_ringbuffer_write.o
lib-y += ../../src/lfds700_stack/lfds700_stack_cleanup.o
lib-y += ../../src/lfds700_stack/lfds700_stack_init.o
lib-y += ../../src/lfds700_stack/lfds700_stack_pop.o
lib-y += ../../src/lfds700_stack/lfds700_stack_push.o
lib-y += ../../src/lfds700_stack/lfds700_stack_query.o
libs-y := ../../bin/
ccflags-y := -I$(src)/../../inc
ccflags-y += -I$(src)/../../inc/liblfds700
ccflags-y += -D_KERNEL_MODE
ccflags-y += -fno-strict-aliasing
ccflags-y += -std=gnu89
ccflags-y += -Wall
ccflags-y += -Werror
ccflags-y += -Wno-unknown-pragmas
ccflags-y += -Wno-unused-but-set-variable
ccflags-y += -Wno-unused-variable
default:
$(MAKE) -C /lib/modules/`uname -r`/build M=$(PWD)
clean:
$(MAKE) -C /lib/modules/`uname -r`/build M=$(PWD) clean
find ../../src/ -name "*.o" -type f -delete
help:
$(MAKE) -C /lib/modules/`uname -r`/build M=$(PWD) help
modules:
$(MAKE) -C /lib/modules/`uname -r`/build M=$(PWD) modules
EXPORTS
lfds700_btree_au_init_valid_on_current_logical_core = lfds700_btree_au_init_valid_on_current_logical_core
lfds700_btree_au_cleanup = lfds700_btree_au_cleanup
lfds700_btree_au_insert = lfds700_btree_au_insert
lfds700_btree_au_get_by_absolute_position_and_then_by_relative_position = lfds700_btree_au_get_by_absolute_position_and_then_by_relative_position
lfds700_btree_au_get_by_absolute_position = lfds700_btree_au_get_by_absolute_position
lfds700_btree_au_get_by_relative_position = lfds700_btree_au_get_by_relative_position
lfds700_btree_au_get_by_key = lfds700_btree_au_get_by_key
lfds700_btree_au_query = lfds700_btree_au_query
lfds700_freelist_init_valid_on_current_logical_core = lfds700_freelist_init_valid_on_current_logical_core
lfds700_freelist_cleanup = lfds700_freelist_cleanup
lfds700_freelist_push = lfds700_freelist_push
lfds700_freelist_pop = lfds700_freelist_pop
lfds700_freelist_query = lfds700_freelist_query
lfds700_hash_a_init_valid_on_current_logical_core = lfds700_hash_a_init_valid_on_current_logical_core
lfds700_hash_a_cleanup = lfds700_hash_a_cleanup
lfds700_hash_a_insert = lfds700_hash_a_insert
lfds700_hash_a_get_by_key = lfds700_hash_a_get_by_key
lfds700_hash_a_iterate_init = lfds700_hash_a_iterate_init
lfds700_hash_a_iterate = lfds700_hash_a_iterate
lfds700_hash_a_query = lfds700_hash_a_query
lfds700_list_aos_init_valid_on_current_logical_core = lfds700_list_aos_init_valid_on_current_logical_core
lfds700_list_aos_cleanup = lfds700_list_aos_cleanup
lfds700_list_aos_insert = lfds700_list_aos_insert
lfds700_list_aos_get_by_key = lfds700_list_aos_get_by_key
lfds700_list_aos_query = lfds700_list_aos_query
lfds700_list_asu_init_valid_on_current_logical_core = lfds700_list_asu_init_valid_on_current_logical_core
lfds700_list_asu_cleanup = lfds700_list_asu_cleanup
lfds700_list_asu_insert_at_position = lfds700_list_asu_insert_at_position
lfds700_list_asu_insert_at_start = lfds700_list_asu_insert_at_start
lfds700_list_asu_insert_at_end = lfds700_list_asu_insert_at_end
lfds700_list_asu_insert_after_element = lfds700_list_asu_insert_after_element
lfds700_list_asu_get_by_key = lfds700_list_asu_get_by_key
lfds700_list_asu_query = lfds700_list_asu_query
lfds700_misc_library_init_valid_on_current_logical_core = lfds700_misc_library_init_valid_on_current_logical_core
lfds700_misc_library_cleanup = lfds700_misc_library_cleanup
lfds700_misc_prng_init = lfds700_misc_prng_init
lfds700_misc_query = lfds700_misc_query
lfds700_queue_init_valid_on_current_logical_core = lfds700_queue_init_valid_on_current_logical_core
lfds700_queue_cleanup = lfds700_queue_cleanup
lfds700_queue_enqueue = lfds700_queue_enqueue
lfds700_queue_dequeue = lfds700_queue_dequeue
lfds700_queue_query = lfds700_queue_query
lfds700_queue_bss_init_valid_on_current_logical_core = lfds700_queue_bss_init_valid_on_current_logical_core
lfds700_queue_bss_cleanup = lfds700_queue_bss_cleanup
lfds700_queue_bss_enqueue = lfds700_queue_bss_enqueue
lfds700_queue_bss_dequeue = lfds700_queue_bss_dequeue
lfds700_queue_bss_query = lfds700_queue_bss_query
lfds700_ringbuffer_init_valid_on_current_logical_core = lfds700_ringbuffer_init_valid_on_current_logical_core
lfds700_ringbuffer_cleanup = lfds700_ringbuffer_cleanup
lfds700_ringbuffer_read = lfds700_ringbuffer_read
lfds700_ringbuffer_write = lfds700_ringbuffer_write
lfds700_ringbuffer_query = lfds700_ringbuffer_query
lfds700_stack_init_valid_on_current_logical_core = lfds700_stack_init_valid_on_current_logical_core
lfds700_stack_cleanup = lfds700_stack_cleanup
lfds700_stack_push = lfds700_stack_push
lfds700_stack_pop = lfds700_stack_pop
lfds700_stack_query = lfds700_stack_query
##### paths #####
BINDIR := ..\..\bin
INCDIR := ..\..\inc
OBJDIR := ..\..\obj
SRCDIR := ..\..\src
##### misc #####
QUIETLY := 1>nul 2>nul
NULL :=
SPACE := $(NULL) # TRD : with a trailing space
##### sources, objects and libraries #####
BINNAME := liblfds700
LIB_BINARY := $(BINDIR)\$(BINNAME).lib
DLL_BINARY := $(BINDIR)\$(BINNAME).dll
SRCDIRS := lfds700_btree_addonly_unbalanced lfds700_freelist lfds700_hash_addonly lfds700_list_addonly_ordered_singlylinked lfds700_list_addonly_singlylinked_unordered lfds700_misc lfds700_queue lfds700_queue_bounded_singleconsumer_singleproducer lfds700_ringbuffer lfds700_stack
SOURCES := lfds700_hash_addonly_cleanup.c lfds700_hash_addonly_get.c lfds700_hash_addonly_init.c lfds700_hash_addonly_insert.c lfds700_hash_addonly_iterate.c lfds700_hash_addonly_query.c \
lfds700_list_addonly_ordered_singlylinked_cleanup.c lfds700_list_addonly_ordered_singlylinked_get.c lfds700_list_addonly_ordered_singlylinked_init.c lfds700_list_addonly_ordered_singlylinked_insert.c lfds700_list_addonly_ordered_singlylinked_query.c \
lfds700_list_addonly_singlylinked_unordered_cleanup.c lfds700_list_addonly_singlylinked_unordered_get.c lfds700_list_addonly_singlylinked_unordered_init.c lfds700_list_addonly_singlylinked_unordered_insert.c lfds700_list_addonly_singlylinked_unordered_query.c \
lfds700_btree_addonly_unbalanced_cleanup.c lfds700_btree_addonly_unbalanced_get.c lfds700_btree_addonly_unbalanced_init.c lfds700_btree_addonly_unbalanced_insert.c lfds700_btree_addonly_unbalanced_query.c \
lfds700_freelist_cleanup.c lfds700_freelist_init.c lfds700_freelist_pop.c lfds700_freelist_push.c lfds700_freelist_query.c \
lfds700_misc_cleanup.c lfds700_misc_globals.c lfds700_misc_init.c lfds700_misc_prng.c lfds700_misc_query.c \
lfds700_queue_cleanup.c lfds700_queue_dequeue.c lfds700_queue_enqueue.c lfds700_queue_init.c lfds700_queue_query.c \
lfds700_queue_bounded_singleconsumer_singleproducer_cleanup.c lfds700_queue_bounded_singleconsumer_singleproducer_dequeue.c lfds700_queue_bounded_singleconsumer_singleproducer_enqueue.c lfds700_queue_bounded_singleconsumer_singleproducer_init.c lfds700_queue_bounded_singleconsumer_singleproducer_query.c \
lfds700_ringbuffer_cleanup.c lfds700_ringbuffer_init.c lfds700_ringbuffer_query.c lfds700_ringbuffer_read.c lfds700_ringbuffer_write.c \
lfds700_stack_cleanup.c lfds700_stack_init.c lfds700_stack_pop.c lfds700_stack_push.c lfds700_stack_query.c
OBJECTS := $(patsubst %.c,$(OBJDIR)/%.obj,$(notdir $(SOURCES)))
SYSLIBS := kernel32.lib
##### default paths fix up #####
INCDIRS := $(patsubst %,%;,$(INCDIR))
INCLUDE += $(subst $(SPACE),,$(INCDIRS))
##### tools #####
MAKE := make
MFLAGS :=
CC := cl
CBASE := /c "-I$(SRCDIR)" "/Fd$(BINDIR)\$(BINNAME).pdb" /D_CRT_SECURE_NO_WARNINGS /DWIN32_LEAN_AND_MEAN /DUNICODE /D_UNICODE /DUNICODE /nologo /W4 /wd 4068 /WX
CFREL := /DNDEBUG /Ox
CFDBG := /D_DEBUG /Gm /Od /Zi
AR := lib
AFLAGS := /nologo /subsystem:console /verbose /wx
LD := link
LFBASE := /def:$(BINNAME).def /dll /nodefaultlib /nologo /nxcompat /subsystem:console /wx
LFREL := /incremental:no
LFDBG := /debug "/pdb:$(BINDIR)\$(BINNAME).pdb"
##### variants #####
CFLAGS := $(CBASE) $(CFDBG) /MTd
ASFLAGS := $(ASBASE) $(ASDBG)
LFLAGS := $(LFBASE) $(LFDBG)
CLIB := libcmtd.lib
ifeq ($(MAKECMDGOALS),librel)
CFLAGS := $(CBASE) $(CFREL) /MT
ASFLAGS := $(ASBASE) $(ASREL)
LFLAGS := $(LFBASE) $(LFREL)
CLIB := libcmt.lib
endif
ifeq ($(MAKECMDGOALS),libdbg)
CFLAGS := $(CBASE) $(CFDBG) /MTd
ASFLAGS := $(ASBASE) $(ASDBG)
LFLAGS := $(LFBASE) $(LFDBG)
CLIB := libcmtd.lib
endif
ifeq ($(MAKECMDGOALS),dllrel)
CFLAGS := $(CBASE) $(CFREL) /MD
ASFLAGS := $(ASBASE) $(ASREL)
LFLAGS := $(LFBASE) $(LFREL)
CLIB := msvcrt.lib
endif
ifeq ($(MAKECMDGOALS),dlldbg)
CFLAGS := $(CBASE) $(CFDBG) /MDd
ASFLAGS := $(ASBASE) $(ASDBG)
LFLAGS := $(LFBASE) $(LFDBG)
CLIB := msvcrtd.lib
endif
##### search paths #####
vpath %.c $(patsubst %,$(SRCDIR)/%;,$(SRCDIRS))
##### implicit rules #####
$(OBJDIR)/%.obj : %.c
$(CC) $(CFLAGS) "/Fo$@" $<
##### explicit rules #####
$(LIB_BINARY) : $(OBJECTS)
$(AR) $(AFLAGS) $(OBJECTS) /out:$(LIB_BINARY)
$(DLL_BINARY) : $(OBJECTS)
$(LD) $(LFLAGS) $(CLIB) $(SYSLIBS) $(OBJECTS) /out:$(DLL_BINARY)
##### phony #####
.PHONY : clean librel libdbg dllrel dlldbg
clean :
@erase /Q $(BINDIR)\$(BINNAME).* $(OBJDIR)\*.obj $(QUIETLY)
dlldbg : $(DLL_BINARY)
dllrel : $(DLL_BINARY)
libdbg : $(LIB_BINARY)
librel : $(LIB_BINARY)
##### notes #####
# /wd 4068 : turn off "unknown pragma" warning
EXPORTS
lfds700_btree_au_init_valid_on_current_logical_core = lfds700_btree_au_init_valid_on_current_logical_core
lfds700_btree_au_cleanup = lfds700_btree_au_cleanup
lfds700_btree_au_insert = lfds700_btree_au_insert
lfds700_btree_au_get_by_absolute_position_and_then_by_relative_position = lfds700_btree_au_get_by_absolute_position_and_then_by_relative_position
lfds700_btree_au_get_by_absolute_position = lfds700_btree_au_get_by_absolute_position
lfds700_btree_au_get_by_relative_position = lfds700_btree_au_get_by_relative_position
lfds700_btree_au_get_by_key = lfds700_btree_au_get_by_key
lfds700_btree_au_query = lfds700_btree_au_query
lfds700_freelist_init_valid_on_current_logical_core = lfds700_freelist_init_valid_on_current_logical_core
lfds700_freelist_cleanup = lfds700_freelist_cleanup
lfds700_freelist_push = lfds700_freelist_push
lfds700_freelist_pop = lfds700_freelist_pop
lfds700_freelist_query = lfds700_freelist_query
lfds700_hash_a_init_valid_on_current_logical_core = lfds700_hash_a_init_valid_on_current_logical_core
lfds700_hash_a_cleanup = lfds700_hash_a_cleanup
lfds700_hash_a_insert = lfds700_hash_a_insert
lfds700_hash_a_get_by_key = lfds700_hash_a_get_by_key
lfds700_hash_a_iterate_init = lfds700_hash_a_iterate_init
lfds700_hash_a_iterate = lfds700_hash_a_iterate
lfds700_hash_a_query = lfds700_hash_a_query
lfds700_list_aos_init_valid_on_current_logical_core = lfds700_list_aos_init_valid_on_current_logical_core
lfds700_list_aos_cleanup = lfds700_list_aos_cleanup
lfds700_list_aos_insert = lfds700_list_aos_insert
lfds700_list_aos_get_by_key = lfds700_list_aos_get_by_key
lfds700_list_aos_query = lfds700_list_aos_query
lfds700_list_asu_init_valid_on_current_logical_core = lfds700_list_asu_init_valid_on_current_logical_core
lfds700_list_asu_cleanup = lfds700_list_asu_cleanup
lfds700_list_asu_insert_at_position = lfds700_list_asu_insert_at_position
lfds700_list_asu_insert_at_start = lfds700_list_asu_insert_at_start
lfds700_list_asu_insert_at_end = lfds700_list_asu_insert_at_end
lfds700_list_asu_insert_after_element = lfds700_list_asu_insert_after_element
lfds700_list_asu_get_by_key = lfds700_list_asu_get_by_key
lfds700_list_asu_query = lfds700_list_asu_query
lfds700_misc_library_init_valid_on_current_logical_core = lfds700_misc_library_init_valid_on_current_logical_core
lfds700_misc_library_cleanup = lfds700_misc_library_cleanup
lfds700_misc_prng_init = lfds700_misc_prng_init
lfds700_misc_query = lfds700_misc_query
lfds700_queue_init_valid_on_current_logical_core = lfds700_queue_init_valid_on_current_logical_core
lfds700_queue_cleanup = lfds700_queue_cleanup
lfds700_queue_enqueue = lfds700_queue_enqueue
lfds700_queue_dequeue = lfds700_queue_dequeue
lfds700_queue_query = lfds700_queue_query
lfds700_queue_bss_init_valid_on_current_logical_core = lfds700_queue_bss_init_valid_on_current_logical_core
lfds700_queue_bss_cleanup = lfds700_queue_bss_cleanup
lfds700_queue_bss_enqueue = lfds700_queue_bss_enqueue
lfds700_queue_bss_dequeue = lfds700_queue_bss_dequeue
lfds700_queue_bss_query = lfds700_queue_bss_query
lfds700_ringbuffer_init_valid_on_current_logical_core = lfds700_ringbuffer_init_valid_on_current_logical_core
lfds700_ringbuffer_cleanup = lfds700_ringbuffer_cleanup
lfds700_ringbuffer_read = lfds700_ringbuffer_read
lfds700_ringbuffer_write = lfds700_ringbuffer_write
lfds700_ringbuffer_query = lfds700_ringbuffer_query
lfds700_stack_init_valid_on_current_logical_core = lfds700_stack_init_valid_on_current_logical_core
lfds700_stack_cleanup = lfds700_stack_cleanup
lfds700_stack_push = lfds700_stack_push
lfds700_stack_pop = lfds700_stack_pop
lfds700_stack_query = lfds700_stack_query

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "liblfds700", "liblfds700.vcxproj", "{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug DLL|Win32 = Debug DLL|Win32
Debug DLL|x64 = Debug DLL|x64
Debug LIB|Win32 = Debug LIB|Win32
Debug LIB|x64 = Debug LIB|x64
Release DLL|Win32 = Release DLL|Win32
Release DLL|x64 = Release DLL|x64
Release LIB|Win32 = Release LIB|Win32
Release LIB|x64 = Release LIB|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug DLL|Win32.ActiveCfg = Debug DLL|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug DLL|Win32.Build.0 = Debug DLL|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug DLL|Win32.Deploy.0 = Debug DLL|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug DLL|x64.ActiveCfg = Debug DLL|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug DLL|x64.Build.0 = Debug DLL|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug DLL|x64.Deploy.0 = Debug DLL|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug LIB|Win32.ActiveCfg = Debug LIB|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug LIB|Win32.Build.0 = Debug LIB|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug LIB|Win32.Deploy.0 = Debug LIB|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug LIB|x64.ActiveCfg = Debug LIB|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug LIB|x64.Build.0 = Debug LIB|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug LIB|x64.Deploy.0 = Debug LIB|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release DLL|Win32.ActiveCfg = Release DLL|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release DLL|Win32.Build.0 = Release DLL|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release DLL|Win32.Deploy.0 = Release DLL|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release DLL|x64.ActiveCfg = Release DLL|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release DLL|x64.Build.0 = Release DLL|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release DLL|x64.Deploy.0 = Release DLL|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release LIB|Win32.ActiveCfg = Release LIB|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release LIB|Win32.Build.0 = Release LIB|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release LIB|Win32.Deploy.0 = Release LIB|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release LIB|x64.ActiveCfg = Release LIB|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release LIB|x64.Build.0 = Release LIB|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release LIB|x64.Deploy.0 = Release LIB|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
</Project>
\ No newline at end of file
EXPORTS
lfds700_btree_au_init_valid_on_current_logical_core = lfds700_btree_au_init_valid_on_current_logical_core
lfds700_btree_au_cleanup = lfds700_btree_au_cleanup
lfds700_btree_au_insert = lfds700_btree_au_insert
lfds700_btree_au_get_by_absolute_position_and_then_by_relative_position = lfds700_btree_au_get_by_absolute_position_and_then_by_relative_position
lfds700_btree_au_get_by_absolute_position = lfds700_btree_au_get_by_absolute_position
lfds700_btree_au_get_by_relative_position = lfds700_btree_au_get_by_relative_position
lfds700_btree_au_get_by_key = lfds700_btree_au_get_by_key
lfds700_btree_au_query = lfds700_btree_au_query
lfds700_freelist_init_valid_on_current_logical_core = lfds700_freelist_init_valid_on_current_logical_core
lfds700_freelist_cleanup = lfds700_freelist_cleanup
lfds700_freelist_push = lfds700_freelist_push
lfds700_freelist_pop = lfds700_freelist_pop
lfds700_freelist_query = lfds700_freelist_query
lfds700_hash_a_init_valid_on_current_logical_core = lfds700_hash_a_init_valid_on_current_logical_core
lfds700_hash_a_cleanup = lfds700_hash_a_cleanup
lfds700_hash_a_insert = lfds700_hash_a_insert
lfds700_hash_a_get_by_key = lfds700_hash_a_get_by_key
lfds700_hash_a_iterate_init = lfds700_hash_a_iterate_init
lfds700_hash_a_iterate = lfds700_hash_a_iterate
lfds700_hash_a_query = lfds700_hash_a_query
lfds700_list_aos_init_valid_on_current_logical_core = lfds700_list_aos_init_valid_on_current_logical_core
lfds700_list_aos_cleanup = lfds700_list_aos_cleanup
lfds700_list_aos_insert = lfds700_list_aos_insert
lfds700_list_aos_get_by_key = lfds700_list_aos_get_by_key
lfds700_list_aos_query = lfds700_list_aos_query
lfds700_list_asu_init_valid_on_current_logical_core = lfds700_list_asu_init_valid_on_current_logical_core
lfds700_list_asu_cleanup = lfds700_list_asu_cleanup
lfds700_list_asu_insert_at_position = lfds700_list_asu_insert_at_position
lfds700_list_asu_insert_at_start = lfds700_list_asu_insert_at_start
lfds700_list_asu_insert_at_end = lfds700_list_asu_insert_at_end
lfds700_list_asu_insert_after_element = lfds700_list_asu_insert_after_element
lfds700_list_asu_get_by_key = lfds700_list_asu_get_by_key
lfds700_list_asu_query = lfds700_list_asu_query
lfds700_misc_library_init_valid_on_current_logical_core = lfds700_misc_library_init_valid_on_current_logical_core
lfds700_misc_library_cleanup = lfds700_misc_library_cleanup
lfds700_misc_prng_init = lfds700_misc_prng_init
lfds700_misc_query = lfds700_misc_query
lfds700_queue_init_valid_on_current_logical_core = lfds700_queue_init_valid_on_current_logical_core
lfds700_queue_cleanup = lfds700_queue_cleanup
lfds700_queue_enqueue = lfds700_queue_enqueue
lfds700_queue_dequeue = lfds700_queue_dequeue
lfds700_queue_query = lfds700_queue_query
lfds700_queue_bss_init_valid_on_current_logical_core = lfds700_queue_bss_init_valid_on_current_logical_core
lfds700_queue_bss_cleanup = lfds700_queue_bss_cleanup
lfds700_queue_bss_enqueue = lfds700_queue_bss_enqueue
lfds700_queue_bss_dequeue = lfds700_queue_bss_dequeue
lfds700_queue_bss_query = lfds700_queue_bss_query
lfds700_ringbuffer_init_valid_on_current_logical_core = lfds700_ringbuffer_init_valid_on_current_logical_core
lfds700_ringbuffer_cleanup = lfds700_ringbuffer_cleanup
lfds700_ringbuffer_read = lfds700_ringbuffer_read
lfds700_ringbuffer_write = lfds700_ringbuffer_write
lfds700_ringbuffer_query = lfds700_ringbuffer_query
lfds700_stack_init_valid_on_current_logical_core = lfds700_stack_init_valid_on_current_logical_core
lfds700_stack_cleanup = lfds700_stack_cleanup
lfds700_stack_push = lfds700_stack_push
lfds700_stack_pop = lfds700_stack_pop
lfds700_stack_query = lfds700_stack_query

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "liblfds700", "liblfds700.vcxproj", "{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug DLL|Win32 = Debug DLL|Win32
Debug DLL|x64 = Debug DLL|x64
Debug LIB|Win32 = Debug LIB|Win32
Debug LIB|x64 = Debug LIB|x64
Release DLL|Win32 = Release DLL|Win32
Release DLL|x64 = Release DLL|x64
Release LIB|Win32 = Release LIB|Win32
Release LIB|x64 = Release LIB|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug DLL|Win32.ActiveCfg = Debug DLL|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug DLL|Win32.Build.0 = Debug DLL|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug DLL|Win32.Deploy.0 = Debug DLL|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug DLL|x64.ActiveCfg = Debug DLL|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug DLL|x64.Build.0 = Debug DLL|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug DLL|x64.Deploy.0 = Debug DLL|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug LIB|Win32.ActiveCfg = Debug LIB|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug LIB|Win32.Build.0 = Debug LIB|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug LIB|Win32.Deploy.0 = Debug LIB|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug LIB|x64.ActiveCfg = Debug LIB|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug LIB|x64.Build.0 = Debug LIB|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug LIB|x64.Deploy.0 = Debug LIB|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release DLL|Win32.ActiveCfg = Release DLL|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release DLL|Win32.Build.0 = Release DLL|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release DLL|Win32.Deploy.0 = Release DLL|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release DLL|x64.ActiveCfg = Release DLL|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release DLL|x64.Build.0 = Release DLL|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release DLL|x64.Deploy.0 = Release DLL|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release LIB|Win32.ActiveCfg = Release LIB|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release LIB|Win32.Build.0 = Release LIB|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release LIB|Win32.Deploy.0 = Release LIB|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release LIB|x64.ActiveCfg = Release LIB|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release LIB|x64.Build.0 = Release LIB|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release LIB|x64.Deploy.0 = Release LIB|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
</Project>
\ No newline at end of file
EXPORTS
lfds700_btree_au_init_valid_on_current_logical_core = lfds700_btree_au_init_valid_on_current_logical_core
lfds700_btree_au_cleanup = lfds700_btree_au_cleanup
lfds700_btree_au_insert = lfds700_btree_au_insert
lfds700_btree_au_get_by_absolute_position_and_then_by_relative_position = lfds700_btree_au_get_by_absolute_position_and_then_by_relative_position
lfds700_btree_au_get_by_absolute_position = lfds700_btree_au_get_by_absolute_position
lfds700_btree_au_get_by_relative_position = lfds700_btree_au_get_by_relative_position
lfds700_btree_au_get_by_key = lfds700_btree_au_get_by_key
lfds700_btree_au_query = lfds700_btree_au_query
lfds700_freelist_init_valid_on_current_logical_core = lfds700_freelist_init_valid_on_current_logical_core
lfds700_freelist_cleanup = lfds700_freelist_cleanup
lfds700_freelist_push = lfds700_freelist_push
lfds700_freelist_pop = lfds700_freelist_pop
lfds700_freelist_query = lfds700_freelist_query
lfds700_hash_a_init_valid_on_current_logical_core = lfds700_hash_a_init_valid_on_current_logical_core
lfds700_hash_a_cleanup = lfds700_hash_a_cleanup
lfds700_hash_a_insert = lfds700_hash_a_insert
lfds700_hash_a_get_by_key = lfds700_hash_a_get_by_key
lfds700_hash_a_iterate_init = lfds700_hash_a_iterate_init
lfds700_hash_a_iterate = lfds700_hash_a_iterate
lfds700_hash_a_query = lfds700_hash_a_query
lfds700_list_aos_init_valid_on_current_logical_core = lfds700_list_aos_init_valid_on_current_logical_core
lfds700_list_aos_cleanup = lfds700_list_aos_cleanup
lfds700_list_aos_insert = lfds700_list_aos_insert
lfds700_list_aos_get_by_key = lfds700_list_aos_get_by_key
lfds700_list_aos_query = lfds700_list_aos_query
lfds700_list_asu_init_valid_on_current_logical_core = lfds700_list_asu_init_valid_on_current_logical_core
lfds700_list_asu_cleanup = lfds700_list_asu_cleanup
lfds700_list_asu_insert_at_position = lfds700_list_asu_insert_at_position
lfds700_list_asu_insert_at_start = lfds700_list_asu_insert_at_start
lfds700_list_asu_insert_at_end = lfds700_list_asu_insert_at_end
lfds700_list_asu_insert_after_element = lfds700_list_asu_insert_after_element
lfds700_list_asu_get_by_key = lfds700_list_asu_get_by_key
lfds700_list_asu_query = lfds700_list_asu_query
lfds700_misc_library_init_valid_on_current_logical_core = lfds700_misc_library_init_valid_on_current_logical_core
lfds700_misc_library_cleanup = lfds700_misc_library_cleanup
lfds700_misc_prng_init = lfds700_misc_prng_init
lfds700_misc_query = lfds700_misc_query
lfds700_queue_init_valid_on_current_logical_core = lfds700_queue_init_valid_on_current_logical_core
lfds700_queue_cleanup = lfds700_queue_cleanup
lfds700_queue_enqueue = lfds700_queue_enqueue
lfds700_queue_dequeue = lfds700_queue_dequeue
lfds700_queue_query = lfds700_queue_query
lfds700_queue_bss_init_valid_on_current_logical_core = lfds700_queue_bss_init_valid_on_current_logical_core
lfds700_queue_bss_cleanup = lfds700_queue_bss_cleanup
lfds700_queue_bss_enqueue = lfds700_queue_bss_enqueue
lfds700_queue_bss_dequeue = lfds700_queue_bss_dequeue
lfds700_queue_bss_query = lfds700_queue_bss_query
lfds700_ringbuffer_init_valid_on_current_logical_core = lfds700_ringbuffer_init_valid_on_current_logical_core
lfds700_ringbuffer_cleanup = lfds700_ringbuffer_cleanup
lfds700_ringbuffer_read = lfds700_ringbuffer_read
lfds700_ringbuffer_write = lfds700_ringbuffer_write
lfds700_ringbuffer_query = lfds700_ringbuffer_query
lfds700_stack_init_valid_on_current_logical_core = lfds700_stack_init_valid_on_current_logical_core
lfds700_stack_cleanup = lfds700_stack_cleanup
lfds700_stack_push = lfds700_stack_push
lfds700_stack_pop = lfds700_stack_pop
lfds700_stack_query = lfds700_stack_query
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0.40629.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "liblfds700", "liblfds700.vcxproj", "{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug DLL|ARM = Debug DLL|ARM
Debug DLL|Win32 = Debug DLL|Win32
Debug DLL|x64 = Debug DLL|x64
Debug LIB|ARM = Debug LIB|ARM
Debug LIB|Win32 = Debug LIB|Win32
Debug LIB|x64 = Debug LIB|x64
Release DLL|ARM = Release DLL|ARM
Release DLL|Win32 = Release DLL|Win32
Release DLL|x64 = Release DLL|x64
Release LIB|ARM = Release LIB|ARM
Release LIB|Win32 = Release LIB|Win32
Release LIB|x64 = Release LIB|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug DLL|ARM.ActiveCfg = Debug DLL|ARM
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug DLL|ARM.Build.0 = Debug DLL|ARM
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug DLL|Win32.ActiveCfg = Debug DLL|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug DLL|Win32.Build.0 = Debug DLL|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug DLL|Win32.Deploy.0 = Debug DLL|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug DLL|x64.ActiveCfg = Debug DLL|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug DLL|x64.Build.0 = Debug DLL|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug DLL|x64.Deploy.0 = Debug DLL|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug LIB|ARM.ActiveCfg = Debug LIB|ARM
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug LIB|ARM.Build.0 = Debug LIB|ARM
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug LIB|Win32.ActiveCfg = Debug LIB|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug LIB|Win32.Build.0 = Debug LIB|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug LIB|Win32.Deploy.0 = Debug LIB|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug LIB|x64.ActiveCfg = Debug LIB|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug LIB|x64.Build.0 = Debug LIB|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Debug LIB|x64.Deploy.0 = Debug LIB|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release DLL|ARM.ActiveCfg = Release DLL|ARM
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release DLL|ARM.Build.0 = Release DLL|ARM
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release DLL|Win32.ActiveCfg = Release DLL|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release DLL|Win32.Build.0 = Release DLL|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release DLL|Win32.Deploy.0 = Release DLL|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release DLL|x64.ActiveCfg = Release DLL|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release DLL|x64.Build.0 = Release DLL|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release DLL|x64.Deploy.0 = Release DLL|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release LIB|ARM.ActiveCfg = Release LIB|ARM
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release LIB|ARM.Build.0 = Release LIB|ARM
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release LIB|Win32.ActiveCfg = Release LIB|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release LIB|Win32.Build.0 = Release LIB|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release LIB|Win32.Deploy.0 = Release LIB|Win32
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release LIB|x64.ActiveCfg = Release LIB|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release LIB|x64.Build.0 = Release LIB|x64
{1E5D7D09-94F2-455D-AE5E-6C7F4C96BCE0}.Release LIB|x64.Deploy.0 = Release LIB|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
</Project>
\ No newline at end of file
#include "liblfds700_internal.h"
/****************************************************************************/
DRIVER_INITIALIZE DriverEntry;
/****************************************************************************/
#pragma warning( disable : 4100 )
NTSTATUS DriverEntry( struct _DRIVER_OBJECT *DriverObject, PUNICODE_STRING RegistryPath )
{
return( STATUS_SUCCESS );
}
#pragma warning( default : 4100 )
@echo off
rmdir /q /s single_dir_for_windows_kernel 1>nul 2>nul
mkdir single_dir_for_windows_kernel 1>nul 2>nul
copy /y ..\..\src\lfds700_btree_addonly_unbalanced\* single_dir_for_windows_kernel\ 1>nul 2>nul
copy /y ..\..\src\lfds700_freelist\* single_dir_for_windows_kernel\ 1>nul 2>nul
copy /y ..\..\src\lfds700_hash_addonly\* single_dir_for_windows_kernel\ 1>nul 2>nul
copy /y ..\..\src\lfds700_list_addonly_ordered_singlylinked\* single_dir_for_windows_kernel\ 1>nul 2>nul
copy /y ..\..\src\lfds700_list_addonly_singlylinked_unordered\* single_dir_for_windows_kernel\ 1>nul 2>nul
copy /y ..\..\src\lfds700_misc\* single_dir_for_windows_kernel\ 1>nul 2>nul
copy /y ..\..\src\lfds700_queue\* single_dir_for_windows_kernel\ 1>nul 2>nul
copy /y ..\..\src\lfds700_queue_bounded_singleconsumer_singleproducer\* single_dir_for_windows_kernel\ 1>nul 2>nul
copy /y ..\..\src\lfds700_ringbuffer\* single_dir_for_windows_kernel\ 1>nul 2>nul
copy /y ..\..\src\lfds700_stack\* single_dir_for_windows_kernel\ 1>nul 2>nul
copy /y ..\..\src\liblfds700_internal.h single_dir_for_windows_kernel\ 1>nul 2>nul
copy /y driver_entry_renamed_to_avoid_compiler_warning.c single_dir_for_windows_kernel\driver_entry.c 1>nul 2>nul
copy /y sources.dynamic single_dir_for_windows_kernel\sources 1>nul 2>nul
echo Windows kernel dynamic library build directory structure created.
echo (Note the effects of this batch file are idempotent).
This diff is collapsed.
/***** the library wide include file *****/
#include "../liblfds700_internal.h"
/***** private prototypes *****/
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment