182657471SMarkus Pfeiffer /** 282657471SMarkus Pfeiffer * Copyright (c) 2013 Larisa Grigore <larisagrigore@gmail.com>. 382657471SMarkus Pfeiffer * All rights reserved. 482657471SMarkus Pfeiffer * 582657471SMarkus Pfeiffer * Redistribution and use in source and binary forms, with or without 682657471SMarkus Pfeiffer * modification, are permitted provided that the following conditions 782657471SMarkus Pfeiffer * are met: 882657471SMarkus Pfeiffer * 1. Redistributions of source code must retain the above copyright 982657471SMarkus Pfeiffer * notice, this list of conditions and the following disclaimer. 1082657471SMarkus Pfeiffer * 2. Redistributions in binary form must reproduce the above copyright 1182657471SMarkus Pfeiffer * notice, this list of conditions and the following disclaimer in the 1282657471SMarkus Pfeiffer * documentation and/or other materials provided with the distribution. 1382657471SMarkus Pfeiffer * 3. The name of the author may not be used to endorse or promote products 1482657471SMarkus Pfeiffer * derived from this software without specific prior written permission. 1582657471SMarkus Pfeiffer * 1682657471SMarkus Pfeiffer * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 1782657471SMarkus Pfeiffer * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 1882657471SMarkus Pfeiffer * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 1982657471SMarkus Pfeiffer * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 2082657471SMarkus Pfeiffer * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2182657471SMarkus Pfeiffer * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2282657471SMarkus Pfeiffer * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2382657471SMarkus Pfeiffer * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2482657471SMarkus Pfeiffer * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2582657471SMarkus Pfeiffer * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2682657471SMarkus Pfeiffer */ 2782657471SMarkus Pfeiffer 2882657471SMarkus Pfeiffer #ifndef SYSVD_UTILS_H 2982657471SMarkus Pfeiffer #define SYSVD_UTILS_H 3082657471SMarkus Pfeiffer 3182657471SMarkus Pfeiffer #define SOCKET_FD_IDX 0 3282657471SMarkus Pfeiffer 3382657471SMarkus Pfeiffer #define POLLPIPE (POLLIN | POLLPRI | POLLRDNORM | POLLRDBAND) 3482657471SMarkus Pfeiffer 3582657471SMarkus Pfeiffer #define CONNEXION_CLOSED 0 3682657471SMarkus Pfeiffer 3782657471SMarkus Pfeiffer #define SHMSEG_FREE 0x0200 3882657471SMarkus Pfeiffer #define SHMSEG_REMOVED 0x0400 3982657471SMarkus Pfeiffer #define SHMSEG_ALLOCATED 0x0800 4082657471SMarkus Pfeiffer #define SHMSEG_WANTED 0x1000 4182657471SMarkus Pfeiffer 4282657471SMarkus Pfeiffer #define DIRPATH "/var/run/sysvipc" 4382657471SMarkus Pfeiffer 4482657471SMarkus Pfeiffer #define SHM_NAME "shm" 4582657471SMarkus Pfeiffer #define SEM_NAME "sem" 4682657471SMarkus Pfeiffer #define MSG_NAME "msg" 4782657471SMarkus Pfeiffer #define UNDO_NAME "undo" 4882657471SMarkus Pfeiffer 4982657471SMarkus Pfeiffer #include <sys/queue.h> 5082657471SMarkus Pfeiffer 5182657471SMarkus Pfeiffer struct client { 5282657471SMarkus Pfeiffer //int fd[2]; 5382657471SMarkus Pfeiffer int sock; 5482657471SMarkus Pfeiffer pid_t pid; 5582657471SMarkus Pfeiffer int undoid; 5682657471SMarkus Pfeiffer LIST_HEAD(_ids_attached, id_attached) ids_attached; 5782657471SMarkus Pfeiffer }; 5882657471SMarkus Pfeiffer 5982657471SMarkus Pfeiffer struct client_entry { 6082657471SMarkus Pfeiffer struct client *client; 6182657471SMarkus Pfeiffer LIST_ENTRY(client_entry) client_link; 6282657471SMarkus Pfeiffer }; 6382657471SMarkus Pfeiffer 6482657471SMarkus Pfeiffer struct pid_attached { 6582657471SMarkus Pfeiffer int pid; 6682657471SMarkus Pfeiffer LIST_ENTRY(pid_attached) link; 6782657471SMarkus Pfeiffer }; 6882657471SMarkus Pfeiffer 6982657471SMarkus Pfeiffer struct id_attached { 7082657471SMarkus Pfeiffer int shmid; 7182657471SMarkus Pfeiffer LIST_ENTRY(id_attached) link; 7282657471SMarkus Pfeiffer }; 7382657471SMarkus Pfeiffer 7482657471SMarkus Pfeiffer struct shm_handle { 7582657471SMarkus Pfeiffer int type; 7682657471SMarkus Pfeiffer int fd; 7782657471SMarkus Pfeiffer LIST_HEAD(_attached_list, pid_attached) attached_list; 7882657471SMarkus Pfeiffer }; 7982657471SMarkus Pfeiffer 8082657471SMarkus Pfeiffer /* Print wrappers. */ 81*416fbbbbSSascha Wildner void sysvd_print_err(const char *fmt, ...) __printflike(1, 2); 82*416fbbbbSSascha Wildner void sysvd_print(const char *fmt, ...) __printflike(1, 2); 8382657471SMarkus Pfeiffer 8482657471SMarkus Pfeiffer #endif 85