code: def _fw_rule_create(self, drvr_name, data, cache):
          
          tenant_id = data.get('firewall_rule').get('tenant_id')
          fw_rule = data.get('firewall_rule')
          rule = self._fw_rule_decode_store(data)
          fw_pol_id = fw_rule.get('firewall_policy_id')
          rule_id = fw_rule.get('id')
          if tenant_id not in self.fwid_attr:
              self.fwid_attr[tenant_id] = FwMapAttr(tenant_id)
          self.fwid_attr[tenant_id].store_rule(rule_id, rule)
          if not cache:
              self._check_create_fw(tenant_id, drvr_name)
          self.tenant_db.store_rule_tenant(rule_id, tenant_id)
          if fw_pol_id is not None and not (
                  self.fwid_attr[tenant_id].is_policy_present(fw_pol_id)):
              pol_data = self.os_helper.get_fw_policy(fw_pol_id)
              if pol_data is not None:
                  self.fw_policy_create(pol_data, cache=cache)
docs: Firewall Rule create routine.
  
          This function updates its local cache with rule parameters.
          It checks if local cache has information about the Policy
          associated with the rule. If not, it means a restart has happened.
          It retrieves the policy associated with the FW by calling
          Openstack API's and calls t he policy create internal routine.