
/*
 * Multicast Listener Discovery/Internet Group Management Protocol
 * XRL interface.
 */


interface mld6igmp/0.1 {

	/**
	 * Enable/disable/start/stop a MLD6IGMP vif interface.
	 *
	 * @param vif_name the name of the vif to enable/disable/start/stop.
	 * @param enable if true, then enable the vif, otherwise
	 * disable it.
	 */
	enable_vif	? vif_name:txt & enable:bool;
	start_vif	? vif_name:txt;
	stop_vif	? vif_name:txt;

	/**
	 * Enable/disable/start/stop all MLD6IGMP vif interfaces.
	 *
	 * @param enable if true, then enable the vifs, otherwise
	 * disable them.
	 */
	enable_all_vifs	? enable:bool;
	start_all_vifs;
	stop_all_vifs;
	
	/**
	 * Enable/disable/start/stop the MLD6IGMP protocol.
	 *
	 * @param enable if true, then enable the MLD6IGMP protocol, otherwise
	 * disable it.
	 */
	enable_mld6igmp	? enable:bool;
	start_mld6igmp;
	stop_mld6igmp;

	/**
	 * Enable/disable/start/stop the MLD6IGMP CLI access.
	 *
	 * @param enable if true, then enable the MLD6IGMP CLI access,
	 * otherwise disable it.
	 */
	enable_cli	? enable:bool;
	start_cli;
	stop_cli;

	/**
	 * Get the configured protocol version per interface.
	 * 
	 * @param vif_name the name of the vif to apply to.
	 * @param proto_version the protocol version.
	 */
	get_vif_proto_version		? vif_name:txt -> proto_version:u32;

	/**
	 * Set the protocol version per interface.
	 * 
	 * @param vif_name the name of the vif to apply to.
	 * @param proto_version the protocol version.
	 */
	set_vif_proto_version		? vif_name:txt & proto_version:u32;

	/**
	 * Reset the protocol version per interface to its default value.
	 * 
	 * @param vif_name the name of the vif to apply to.
	 */
	reset_vif_proto_version		? vif_name:txt;

	/**
	 * Get the IP Router Alert option check per interface for received
	 * packets.
	 *
	 * @param vif_name the name of the vif to apply to.
	 * @param enabled if true, then the IP Router Alert option check was
	 * enabled, otherwise it was disabled.
	 */
	get_vif_ip_router_alert_option_check	? vif_name:txt -> enabled:bool;

	/**
	 * Set the IP Router Alert option check per interface for received
	 * packets.
	 *
	 * @param vif_name the name of the vif to apply to.
	 * @param enable if true, then enable the IP Router Alert option check,
	 * otherwise disable it.
	 */
	set_vif_ip_router_alert_option_check	? vif_name:txt & enable:bool;

	/**
	 * Reset the IP Router Alert option check for received packets per
	 * per interface to its default value.
	 *
	 * @param vif_name the name of the vif to apply to.
	 */
	reset_vif_ip_router_alert_option_check	? vif_name:txt;

	/**
	 * Get the Query Interval per interface.
	 *
	 * @param vif_name the name of the vif to apply to.
	 * @param interval_sec the number of seconds in the interval.
	 * @param interval_usec the number of microseconds (in addition
	 * to interval_sec) in the interval.
	 */
	get_vif_query_interval			? vif_name:txt		\
						-> interval_sec:u32	\
						& interval_usec:u32;

	/**
	 * Set the Query Interval per interface.
	 *
	 * @param vif_name the name of the vif to apply to.
	 * @param interval_sec the number of seconds in the interval.
	 * @param interval_usec the number of microseconds (in addition
	 * to interval_sec) in the interval.
	 */
	set_vif_query_interval			? vif_name:txt		\
						& interval_sec:u32	\
						& interval_usec:u32;

	/**
	 * Reset the Query Interval per interface to its default value.
	 *
	 * @param vif_name the name of the vif to apply to.
	 */
	reset_vif_query_interval		? vif_name:txt;

	/**
	 * Get the Last Member Query Interval per interface.
	 *
	 * @param vif_name the name of the vif to apply to.
	 * @param interval_sec the number of seconds in the interval.
	 * @param interval_usec the number of microseconds (in addition
	 * to interval_sec) in the interval.
	 */
	get_vif_query_last_member_interval	? vif_name:txt		\
						-> interval_sec:u32	\
						& interval_usec:u32;

	/**
	 * Set the Last Member Query Interval per interface.
	 *
	 * @param vif_name the name of the vif to apply to.
	 * @param interval_sec the number of seconds in the interval.
	 * @param interval_usec the number of microseconds (in addition
	 * to interval_sec) in the interval.
	 */
	set_vif_query_last_member_interval	? vif_name:txt		\
						& interval_sec:u32	\
						& interval_usec:u32;

	/**
	 * Reset the Last Member Query Interval per interface to its
	 * default value.
	 *
	 * @param vif_name the name of the vif to apply to.
	 */
	reset_vif_query_last_member_interval	? vif_name:txt;

	/**
	 * Get the Query Response Interval per interface.
	 *
	 * @param vif_name the name of the vif to apply to.
	 * @param interval_sec the number of seconds in the interval.
	 * @param interval_usec the number of microseconds (in addition
	 * to interval_sec) in the interval.
	 */
	get_vif_query_response_interval		? vif_name:txt		\
						-> interval_sec:u32	\
						& interval_usec:u32;

	/**
	 * Set the Query Response Interval per interface.
	 *
	 * @param vif_name the name of the vif to apply to.
	 * @param interval_sec the number of seconds in the interval.
	 * @param interval_usec the number of microseconds (in addition
	 * to interval_sec) in the interval.
	 */
	set_vif_query_response_interval		? vif_name:txt		\
						& interval_sec:u32	\
						& interval_usec:u32;

	/**
	 * Reset the Query Response Interval per interface to its
	 * default value.
	 *
	 * @param vif_name the name of the vif to apply to.
	 */
	reset_vif_query_response_interval	? vif_name:txt;

	/**
	 * Get the Robustness Variable count per interface.
	 *
	 * @param vif_name the name of the vif to apply to.
	 * @param robust_count the count value.
	 */
	get_vif_robust_count			? vif_name:txt		\
						-> robust_count:u32;

	/**
	 * Set the Robustness Variable count per interface.
	 *
	 * @param vif_name the name of the vif to apply to.
	 * @param robust_count the count value.
	 */
	set_vif_robust_count			? vif_name:txt		\
						& robust_count:u32;

	/**
	 * Reset the Robustness Variable count per interface to its
	 * default value.
	 *
	 * @param vif_name the name of the vif to apply to.
	 */
	reset_vif_robust_count			? vif_name:txt;

	/**
	 * Enable/disable the MLD6IGMP trace log for all operations.
	 *
	 * @param enable if true, then enable the trace log, otherwise
	 * disable it.
	 */
	log_trace_all	? enable:bool;

	/**
	 * Add/delete a client protocol in the MLD/IGMP protocol.
	 *
	 * @param xrl_sender_name the XRL name of the originator of this XRL.
	 * @param protocol_name the name of the protocol to add/delete.
	 * @param protocol_id the ID of the protocol to add/delete
	 * (both sides must agree on the particular values).
	 * @param vif_name the name of the vif the protocol add/delete to
	 * apply to.
	 * @param vif_index the index of the vif the protocol add/delete to
	 * apply to.
	 *
	 * The added protocol will receive Join/Leave membership information
	 * about same-LAN members for the particular vif.
	 */
	/* TODO: the protocol names have to be globally defined */
	add_protocol4	? xrl_sender_name:txt				\
			& protocol_name:txt & protocol_id:u32		\
			& vif_name:txt & vif_index:u32;
	add_protocol6	? xrl_sender_name:txt				\
			& protocol_name:txt & protocol_id:u32		\
			& vif_name:txt & vif_index:u32;
	
	delete_protocol4 ? xrl_sender_name:txt				\
			& protocol_name:txt & protocol_id:u32		\
			& vif_name:txt & vif_index:u32;
	delete_protocol6 ? xrl_sender_name:txt				\
			& protocol_name:txt & protocol_id:u32		\
			& vif_name:txt & vif_index:u32;
}
