Просмотр исходного кода

add some support functions relating to this_ip

(Logical change 1.167)


git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@572 fd59a12c-fef9-0310-b244-a6a79926bd2f
Steven Dake 21 лет назад
Родитель
Сommit
64e4978f00
2 измененных файлов с 32 добавлено и 4 удалено
  1. 27 3
      exec/main.c
  2. 5 1
      exec/main.h

+ 27 - 3
exec/main.c

@@ -163,7 +163,9 @@ static void sigusr2_handler (int num)
 	return;
 }
 
-struct sockaddr_in this_ip;
+struct sockaddr_in *this_ip;
+struct sockaddr_in this_non_loopback_ip;
+struct sockaddr_in config_mcast_addr;
 #define LOCALHOST_IP inet_addr("127.0.0.1")
 
 char *socketname = "libais.socket";
@@ -753,6 +755,10 @@ static void confchg_fn (
 {
 	int i;
 
+	if (this_ip->sin_addr.s_addr != LOCALHOST_IP) {
+		memcpy(&this_non_loopback_ip, this_ip, sizeof(struct sockaddr_in));
+	}
+
 	/*
 	 * Execute configuration change for synchronization service
 	 */
@@ -933,6 +939,21 @@ void aisexec_keyread (unsigned char *key)
 	close (fd);
 }
 
+int message_source_is_local(struct message_source *source)
+{
+	int ret = 0;
+	if ((source->in_addr.s_addr == LOCALHOST_IP)
+		||(source->in_addr.s_addr == this_non_loopback_ip.sin_addr.s_addr)) {
+		ret = 1;
+	}
+	return ret;	
+}
+
+void message_source_set (struct message_source *source, struct conn_info *conn_info)
+{
+	source->in_addr.s_addr = this_ip->sin_addr.s_addr;
+	source->conn_info = conn_info;
+}
 
 
 int main (int argc, char **argv)
@@ -944,6 +965,8 @@ int main (int argc, char **argv)
 	char *error_string;
 	struct openais_config openais_config;
 
+	memset(&this_non_loopback_ip, 0, sizeof(struct sockaddr_in));
+
 	aisexec_uid_determine ();
 
 	aisexec_gid_determine ();
@@ -969,6 +992,8 @@ int main (int argc, char **argv)
 		ais_done (AIS_DONE_MAINCONFIGREAD);
 	}
 
+	memcpy (&config_mcast_addr, &openais_config.mcast_addr, sizeof (struct sockaddr_in));
+
 	res = log_setup (&error_string, openais_config.logmode, openais_config.logfile);
 	if (res == -1) {
 		log_printf (LOG_LEVEL_ERROR, error_string);
@@ -1003,8 +1028,7 @@ int main (int argc, char **argv)
 		0,
 		deliver_fn, confchg_fn);
 	
-	memcpy (&this_ip, &openais_config.interfaces[0].boundto,
-		sizeof (struct sockaddr_in));
+	this_ip = &openais_config.interfaces[0].boundto;
 
 	/*
 	 * Drop root privleges to user 'ais'

+ 5 - 1
exec/main.h

@@ -113,7 +113,7 @@ struct conn_info {
 	struct ais_ci ais_ci;	/* libais connection information */
 };
 
-extern struct sockaddr_in this_ip;
+extern struct sockaddr_in *this_ip;
 
 poll_handle aisexec_poll_handle;
 
@@ -121,4 +121,8 @@ extern struct gmi_groupname aisexec_groupname;
 
 extern int libais_send_response (struct conn_info *conn_info, void *msg, int mlen);
 
+extern int message_source_is_local(struct message_source *source);
+
+extern void message_source_set(struct message_source *source, struct conn_info *conn_info);
+
 #endif /* AIS_EXEC_H_DEFINED */