Hi Anh, Ack. No comment from me.
Best regards, Hieu -----Original Message----- From: Anh Tuan Le <anh.t...@dektech.com.au> Sent: Tuesday, April 27, 2021 5:48 PM To: Thang Duc Nguyen <thang.d.ngu...@dektech.com.au>; Thanh Nguyen <thanh.ngu...@dektech.com.au>; Hieu Hong Hoang <hieu.h.ho...@dektech.com.au> Cc: opensaf-devel@lists.sourceforge.net; Anh Tuan Le <anh.t...@dektech.com.au> Subject: [PATCH 1/1] pyosaf: support for amf api version b4.02 [#3256] --- python/pyosaf/saAmf.py | 58 ++++++++++++++++++++++++++++++++++++++++- python/samples/amf_demo | 35 ++++++++++++++++++++++--- 2 files changed, 89 insertions(+), 4 deletions(-) diff --git a/python/pyosaf/saAmf.py b/python/pyosaf/saAmf.py index ff9265d22..510a34c89 100644 --- a/python/pyosaf/saAmf.py +++ b/python/pyosaf/saAmf.py @@ -392,7 +392,12 @@ SaAmfContainedComponentInstantiateCallbackT = CFUNCTYPE(None, SaAmfContainedComponentCleanupCallbackT = CFUNCTYPE(None, SaInvocationT, POINTER(SaNameT)) -#if defined(SA_AMF_B01) || defined(SA_AMF_B02) +SaAmfCsiAttributeChangeCallbackT = CFUNCTYPE(None, SaInvocationT, + POINTER(SaNameT), + SaAmfCSIAttributeListT) + + +# if defined(SA_AMF_B01) || defined(SA_AMF_B02) class SaAmfCallbacksT(Structure): """Contain various callbacks AMF may invoke on a component. """ @@ -691,6 +696,57 @@ def saAmfInitialize_4(amfHandle, amfCallbacks, version): return amfdll.saAmfInitialize_4(BYREF(amfHandle), BYREF(amfCallbacks), BYREF(version)) + +# pylint: disable-msg=R0903, C0103 +class SaAmfCallbacksT_o4(Structure): + """Contain various callbacks AMF may invoke on a component. + """ + _fields_ = [('saAmfHealthcheckCallback', + SaAmfHealthcheckCallbackT), + ('saAmfComponentTerminateCallback', + SaAmfComponentTerminateCallbackT), + ('saAmfCSISetCallback', + SaAmfCSISetCallbackT), + ('saAmfCSIRemoveCallback', + SaAmfCSIRemoveCallbackT), + ('saAmfProtectionGroupTrackCallback', + SaAmfProtectionGroupTrackCallbackT_4), + ('saAmfProxiedComponentInstantiateCallback', + SaAmfProxiedComponentInstantiateCallbackT), + ('saAmfProxiedComponentCleanupCallback', + SaAmfProxiedComponentCleanupCallbackT), + ('saAmfContainedComponentInstantiateCallback', + SaAmfContainedComponentInstantiateCallbackT), + ('saAmfContainedComponentCleanupCallback', + SaAmfContainedComponentCleanupCallbackT), + ('osafCsiAttributeChangeCallback', + SaAmfCsiAttributeChangeCallbackT)] +# pylint: enable-msg=R0903, C0103 + + +def saAmfInitialize_o4(amfHandle, amfCallbacks, version): + """Register invoking process with AMF. + + type arguments: + SaAmfHandleT amfHandle + SaAmfCallbacksT_o4 amfCallbacks + SaVersionT version + + returns: + SaAisErrorT + + """ + + amfdll.saAmfInitialize_o4.argtypes = [POINTER(SaAmfHandleT), + POINTER(SaAmfCallbacksT_o4), + POINTER(SaVersionT)] + + amfdll.saAmfInitialize_o4.restype = SaAisErrorT + + return amfdll.saAmfInitialize_o4(BYREF(amfHandle), + BYREF(amfCallbacks), + BYREF(version)) + + def saAmfSelectionObjectGet(amfHandle, selectionObject): """Return operating system handle associated with AMF handle to detect pending callbacks. diff --git a/python/samples/amf_demo b/python/samples/amf_demo index f076a9d77..2b84f357a 100644 --- a/python/samples/amf_demo +++ b/python/samples/amf_demo @@ -26,6 +26,7 @@ import sys import errno import signal import socket +import ctypes import hashlib from select import select, error @@ -47,8 +48,8 @@ class AmfDemo(object): def __init__(self, health_check_key, signal_handler): self.handle = saAmf.SaAmfHandleT() - self.version = SaVersionT('B', 4, 1) - self.callbacks = saAmf.SaAmfCallbacksT_4() + self.version = SaVersionT('B', 4, 2) + self.callbacks = saAmf.SaAmfCallbacksT_o4() self.sel_obj = saAmf.SaSelectionObjectT() self.comp_name = SaNameT() self.health_check_key = saAmf.SaAmfHealthcheckKeyT(health_check_key) @@ -66,10 +67,13 @@ class AmfDemo(object): saAmf.SaAmfCSISetCallbackT(self.csi_set_callback) self.callbacks.saAmfCSIRemoveCallback = \ saAmf.SaAmfCSIRemoveCallbackT(self.csi_remove_callback) + self.callbacks.osafCsiAttributeChangeCallback = \ + + saAmf.SaAmfCsiAttributeChangeCallbackT(self.csi_attr_chg_callback) log_info("Start initialization.") - rc = saAmf.saAmfInitialize_4(self.handle, self.callbacks, self.version) + rc = saAmf.saAmfInitialize_o4(self.handle, + self.callbacks, self.version) if not self.check_rc("saAmfInitialize", rc): return False @@ -201,6 +205,31 @@ class AmfDemo(object): self.check_rc("saAmfResponse_4", rc) self.term_handler.send_terminate_msg() + def csi_attr_chg_callback(self, invocation, csi_name, csi_attr_list): + """ callback to handle CST attribute change callback event. + + Args: + invocation (SaInvocationT): Invocation of the callback + csiname POINTER(SaNameT): Name of the csi being changed + csi_attr_list (SaAmfCSIAttributeListT): List of csi attributes + being changed + """ + log_info("CSI attribute change callback invoked") + rc = saAmf.saAmfResponse_4(self.handle, invocation, None, + eSaAisErrorT.SA_AIS_OK) + self.check_rc("saAmfResponse_4", rc) + attr_name = "" + attr_value = "" + log_info("CSI Name:'%s'" % str(csi_name[0])) + for i in range(csi_attr_list.number): + attr = csi_attr_list.attr[i] + attr_name = ctypes.cast(attr.attrName, + ctypes.c_char_p).value.decode('utf-8') + attr_value = ctypes.cast(attr.attrValue, + ctypes.c_char_p).value.decode('utf-8') + log_info("CSI attribute name: %s" % attr_name) + log_info("CSI attribute value: %s" % attr_value) + @staticmethod def check_rc(function_name, rc): """ Check return code if it ok or not. -- 2.17.1 _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel