-CFLAGS+= -Wall -Wextra
+CFLAGS+= -Wall -Wextra -D_REENTRANT
#include "fwp_ctable.h"
#include "fwp_msg.h"
+#include "fwp_util.h"
#include "fwp_msgq.h"
#include "fwp_vres.h"
#include "fwp_proto.h"
#include <semaphore.h>
#include <stdlib.h>
-#define UN_MNGT_SOCKET "/var/run/fwpsock"
-
-#define FWP_CONN_MAX 10
#define FWP_MTU 2346
-#define FWP_DATAMSG_SIZE_MAX FWP_MTU
-#define FWP_MNGTMSG_SIZE_MAX 128
+#define FWP_MNGR_UDP_PORT 3000
+#define FWP_AGENT_UDP_PORT 3001
-#define MNGT_CLIENT_UDP_PORT 3333
-#define MNGT_SERVER_UDP_PORT 3334
+enum fwp_opmode_t{
+ FWP_AGENT = 0,
+ FWP_MANAGER = 1,
+};
/*
* Global variables
/* Global addresses and sockfds */
-struct sockaddr_in fwp_mngr_addr;
-struct sockaddr_un fwp_agent_addr;
-struct sockaddr_un fwp_laddr;
-struct sockaddr_in fwp_raddr;
-int fwp_lsockfd;
-int fwp_rsockfd;
-fd_set fwp_input_fdset;
-
-
+struct sockaddr_in fwp_mngr_addr; /**< FWP mngr (AP) address */
+struct sockaddr_un fwp_laddr; /**< FWP local address */
+struct sockaddr_in fwp_raddr; /**< FWP remote address */
+int fwp_lsockfd; /**< FWP local sockfd */
+int fwp_rsockfd; /**< FWP remote sockfd */
+fd_set fwp_input_fdset;
struct fwp_msgq msgq_negt_in;
struct fwp_msgq msgq_negt_out;
int fwp_mngt_init(enum fwp_opmode_t opmode, char *fwp_mngr_addr_s)
{
- fwp_init();
switch (opmode) {
case FWP_AGENT:
- fwp_lsockfd = fwp_open_unix_socket(FWP_AGENT_UNIXPATH, &fwp_laddr);
+ fwp_lsockfd = fwp_create_unix_socket(FWP_AGENT_UNIXPATH,
+ &fwp_laddr);
fwp_mngr_addr.sin_family = AF_INET;
fwp_mngr_addr.sin_addr.s_addr = inet_addr(fwp_mngr_addr_s);
fwp_mngr_addr.sin_port = htons(FWP_MNGR_UDP_PORT);
- fwp_rsockfd = fwp_open_inet_socket(FWP_AGENT_UDP_PORT, &fwp_raddr);
+ fwp_rsockfd = fwp_create_inet_socket(FWP_AGENT_UDP_PORT,
+ &fwp_raddr);
FD_ZERO(&fwp_input_fdset);
FD_SET(fwp_lsockfd, &fwp_input_fdset);
FD_SET(fwp_rsockfd, &fwp_input_fdset);
+ break;
+
case FWP_MANAGER:
- fwp_lsockfd = fwp_open_unix_socket(FWP_AGENT_UNIXPATH, &fwp_laddr);
+ fwp_lsockfd = fwp_create_unix_socket(FWP_AGENT_UNIXPATH,
+ &fwp_laddr);
/*fwp_agent_addr_in.sin_family = AF_INET;
fwp_agent_addr.sin_addr.s_addr = inet_addr(fwp_mngr_addr_s);
fwp_agent_addr.sin_port = htons(FWP_AGENT_UDP_PORT);*/
- fwp_rsockfd = fwp_open_inet_socket(FWP_MNGR_UDP_PORT, &fwp_raddr);
+ fwp_rsockfd = fwp_create_inet_socket(FWP_MNGR_UDP_PORT,
+ &fwp_raddr);
FD_ZERO(&fwp_input_fdset);
FD_SET(fwp_lsockfd, &fwp_input_fdset);
FD_SET(fwp_rsockfd, &fwp_input_fdset);
-
- case FWP_APP:
- /* temporarily */
- fwp_lsockfd = fwp_open_unix_socket(FWP_CLIENT_UNIXPATH, &fwp_laddr);
-
- bzero(&fwp_agent_addr, sizeof(fwp_agent_addr));
- fwp_agent_addr.sun_family = AF_UNIX;
- strcpy(fwp_agent_addr.sun_path, FWP_AGENT_UNIXPATH);
- }
-
+ break;
+ case default:
+ break;
+ }
return 0;
}
}
}
- fwp_init(mode, ap);
+ fwp_init();
+ fwp_mngt_init(mode, ap);
if (mode == FWP_MANAGER){
if ((service_vres_id = fwp_vres_open(&cnt) < 0)) {
#define FWP_AGENT_UNIXPATH "/tmp/fwp-agent"
#define FWP_CLIENT_UNIXPATH "/tmp/fwp-client" /*temporarily*/
-#define FWP_MNGR_UDP_PORT 3000
-#define FWP_AGENT_UDP_PORT 3001
-
-enum fwp_opmode_t{
- FWP_APP = 0,
- FWP_AGENT = 1,
- FWP_MANAGER = 2,
-};
-
-extern struct sockaddr_in fwp_mngr_addr; /**< FWP mngr (AP) address */
-extern struct sockaddr_un fwp_laddr; /**< FWP local address */
-extern struct sockaddr_in fwp_raddr; /**< FWP remote address */
-extern int fwp_lsockfd; /**< FWP local sockfd */
-extern int fwp_rsockfd; /**< FWP remote sockfd */
-extern fd_set fwp_input_fdset;
-
-int fwp_init(enum fwp_opmode_t opmode, char *fwp_mngr_addr_s);
+
+int fwp_init();
ssize_t fwp_recv(int sockfd, void *buffer, size_t buffer_size, int flags,
struct sockaddr *from, socklen_t *fromlen);
#include <time.h>
#include <stdio.h>
#include <errno.h>
+#include <unistd.h>
/*#include <signal.h>*/
#include <sys/socket.h>
int fwp_set_rt_prio(int priority);
-int fwp_open_unix_socket(char *path, struct sockaddr_un *addr)
+int fwp_create_unix_socket(char *path, struct sockaddr_un *addr);
-int fwp_open_inet_socket(unsigned int port, struct sockaddr_in *addr)
+int fwp_create_inet_socket(unsigned int port, struct sockaddr_in *addr);
#endif /* _FWP_UTIL_H */
#include "fwp_msgq.h"
#include "fwp_msg.h"
#include "fwp_proto.h"
+#include "fwp_util.h"
#include <string.h>
+struct sockaddr_un fwp_agent_addr;
+struct sockaddr_un fwp_client_addr;
+int fwp_client_sockfd;
/*
*TODO: return values other than -1
fwp_vres_table_init();
fwp_ac_table_init();
+ /* temporarily */
+ fwp_client_sockfd = fwp_create_unix_socket(FWP_CLIENT_UNIXPATH,
+ &fwp_client_addr);
+
+ bzero(&fwp_agent_addr, sizeof(fwp_agent_addr));
+ fwp_agent_addr.sun_family = AF_UNIX;
+ strcpy(fwp_agent_addr.sun_path, FWP_AGENT_UNIXPATH);
+
return 0;
}
{
struct fwp_msgb *msgb;
unsigned int code, hid;
+ struct sockaddr_un from;
socklen_t fromlen;
msgb = fwp_msgb_alloc(sizeof(struct fwp_msg_header) +
* and wait for reply
*/
fromlen = sizeof(fwp_agent_addr);
- sendto(fwp_lsockfd, msgb->start, msgb->len, 0,
+ sendto(fwp_client_sockfd, msgb->start, msgb->len, 0,
(struct sockaddr*)&fwp_agent_addr, fromlen);
- recvfrom(fwp_lsockfd, msgb->start, msgb->buf_size, 0,
- (struct sockaddr*)&fwp_agent_addr, &fromlen);
+ recvfrom(fwp_client_sockfd, msgb->start, msgb->buf_size, 0,
+ (struct sockaddr*)&from, &fromlen);
fwp_msg_header_pull(msgb, &code, &hid);
fwp_msg_contract_pull(msgb, contract);
return 0;
}
-int fwp_open_unix_socket(char *path, struct sockaddr_un *addr)
+int fwp_create_unix_socket(char *path, struct sockaddr_un *addr)
{
int sockfd;
return sockfd;
}
-int fwp_open_inet_socket(unsigned int port, struct sockaddr_in *addr)
+int fwp_create_inet_socket(unsigned int port, struct sockaddr_in *addr)
{
int sockfd;
-CFLAGS = -Wall -D_REENTRANT -g
+CFLAGS = -g
test_PROGRAMS = fwp_msgtest
fwp_msgtest_SOURCES+= fwp_msgtest.c
-#CFLAGS+= -Wall -Wextra
test_PROGRAMS = fwp_sendrecv_test
fwp_sendrecv_test_SOURCES+= fwp_sendrecv_test.c
lib_LOADLIBES += fwp pthread rt