diff --git a/lib/ansible/modules/network/ios/ios_l3_interface.py b/lib/ansible/modules/network/ios/ios_l3_interface.py
index f8dcc3ac1fb..99aea45798f 100644
--- a/lib/ansible/modules/network/ios/ios_l3_interface.py
+++ b/lib/ansible/modules/network/ios/ios_l3_interface.py
@@ -17,7 +17,7 @@ DOCUMENTATION = """
 module: ios_l3_interface
 version_added: "2.5"
 author: "Ganesh Nalawade (@ganeshrn)"
-short_description: Manage L3 interfaces on IOS network devices.
+short_description: Manage L3 interfaces on Cisco IOS network devices.
 description:
   - This module provides declarative management of L3 interfaces
     on IOS network devices.
diff --git a/lib/ansible/modules/network/ios/ios_lldp.py b/lib/ansible/modules/network/ios/ios_lldp.py
new file mode 100644
index 00000000000..613bd18643b
--- /dev/null
+++ b/lib/ansible/modules/network/ios/ios_lldp.py
@@ -0,0 +1,111 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+# (c) 2017, Ansible by Red Hat, inc
+# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
+
+from __future__ import absolute_import, division, print_function
+__metaclass__ = type
+
+
+ANSIBLE_METADATA = {'metadata_version': '1.1',
+                    'status': ['preview'],
+                    'supported_by': 'network'}
+
+
+DOCUMENTATION = """
+---
+module: ios_lldp
+version_added: "2.5"
+author: "Ganesh Nalawade (@ganeshrn)"
+short_description: Manage LLDP configuration on Cisco IOS network devices.
+description:
+  - This module provides declarative management of LLDP service
+    on Cisco IOS network devices.
+notes:
+  - Tested against IOS 15.2
+options:
+  state:
+    description:
+      - State of the LLDP configuration. If value is I(present) lldp will be enabled
+        else if it is I(absent) it will be disabled.
+    default: present
+    choices: ['present', 'absent']
+"""
+
+EXAMPLES = """
+- name: Enable LLDP service
+  ios_lldp:
+    state: present
+
+- name: Disable LLDP service
+  ios_lldp:
+    state: absent
+"""
+
+RETURN = """
+commands:
+  description: The list of configuration mode commands to send to the device
+  returned: always, except for the platforms that use Netconf transport to manage the device.
+  type: list
+  sample:
+    - lldp run
+"""
+from ansible.module_utils.basic import AnsibleModule
+from ansible.module_utils.network.ios.ios import get_config, load_config, run_commands
+from ansible.module_utils.network.ios.ios import ios_argument_spec
+
+
+def has_lldp(module):
+    output = run_commands(module, ['show lldp'])
+
+    is_lldp_enable = False
+    if len(output) > 0 and "LLDP is not enabled" not in output[0]:
+        is_lldp_enable = True
+
+    return is_lldp_enable
+
+
+def main():
+    """ main entry point for module execution
+    """
+    argument_spec = dict(
+        state=dict(default='present',
+                   choices=['present', 'absent',
+                            'enabled', 'disabled'])
+    )
+
+    argument_spec.update(ios_argument_spec)
+
+    module = AnsibleModule(argument_spec=argument_spec,
+                           supports_check_mode=True)
+
+    warnings = list()
+
+    result = {'changed': False}
+
+    if warnings:
+        result['warnings'] = warnings
+
+    HAS_LLDP = has_lldp(module)
+
+    commands = []
+
+    if module.params['state'] == 'absent' and HAS_LLDP:
+        commands.append('no lldp run')
+    elif module.params['state'] == 'present' and not HAS_LLDP:
+        commands.append('lldp run')
+
+    result['commands'] = commands
+
+    if commands:
+        if not module.check_mode:
+            load_config(module, commands)
+
+        result['changed'] = True
+
+    module.exit_json(**result)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/test/integration/ios.yaml b/test/integration/ios.yaml
index a8415e7059d..5094aeb2009 100644
--- a/test/integration/ios.yaml
+++ b/test/integration/ios.yaml
@@ -112,6 +112,15 @@
             failed_modules: "{{ failed_modules }} + [ 'ios_l3_interface' ]"
             test_failed: true
 
+    - block:
+      - include_role:
+          name: ios_lldp
+        when: "limit_to in ['*', 'ios_lldp']"
+      rescue:
+        - set_fact:
+            failed_modules: "{{ failed_modules }} + [ 'ios_lldp' ]"
+            test_failed: true
+
 #    - block:
 #      - include_role:
 #          name: ios_vlan
diff --git a/test/integration/targets/ios_lldp/defaults/main.yaml b/test/integration/targets/ios_lldp/defaults/main.yaml
new file mode 100644
index 00000000000..5f709c5aac1
--- /dev/null
+++ b/test/integration/targets/ios_lldp/defaults/main.yaml
@@ -0,0 +1,2 @@
+---
+testcase: "*"
diff --git a/test/integration/targets/ios_lldp/meta/main.yaml b/test/integration/targets/ios_lldp/meta/main.yaml
new file mode 100644
index 00000000000..159cea8d383
--- /dev/null
+++ b/test/integration/targets/ios_lldp/meta/main.yaml
@@ -0,0 +1,2 @@
+dependencies:
+  - prepare_ios_tests
diff --git a/test/integration/targets/ios_lldp/tasks/cli.yaml b/test/integration/targets/ios_lldp/tasks/cli.yaml
new file mode 100644
index 00000000000..3fb26426925
--- /dev/null
+++ b/test/integration/targets/ios_lldp/tasks/cli.yaml
@@ -0,0 +1,22 @@
+---
+- name: collect all cli test cases
+  find:
+    paths: "{{ role_path }}/tests/cli"
+    patterns: "{{ testcase }}.yaml"
+  register: test_cases
+  delegate_to: localhost
+
+- name: set test_items
+  set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}"
+
+- name: run test cases (connection=network_cli)
+  include: "{{ test_case_to_run }} ansible_connection=network_cli ansible_become=yes"
+  with_items: "{{ test_items }}"
+  loop_control:
+    loop_var: test_case_to_run
+
+- name: run test case (connection=local)
+  include: "{{ test_case_to_run }} ansible_connection=local"
+  with_first_found: "{{ test_items }}"
+  loop_control:
+    loop_var: test_case_to_run
diff --git a/test/integration/targets/ios_lldp/tasks/main.yaml b/test/integration/targets/ios_lldp/tasks/main.yaml
new file mode 100644
index 00000000000..415c99d8b12
--- /dev/null
+++ b/test/integration/targets/ios_lldp/tasks/main.yaml
@@ -0,0 +1,2 @@
+---
+- { include: cli.yaml, tags: ['cli'] }
diff --git a/test/integration/targets/ios_lldp/tests/cli/basic.yaml b/test/integration/targets/ios_lldp/tests/cli/basic.yaml
new file mode 100644
index 00000000000..478f2318227
--- /dev/null
+++ b/test/integration/targets/ios_lldp/tests/cli/basic.yaml
@@ -0,0 +1,51 @@
+---
+- debug: msg="START ios_lldp cli/basic.yaml on connection={{ ansible_connection }}"
+
+- name: Make sure LLDP is not running before tests
+  ios_config:
+    lines: no lldp run
+    authorize: yes
+
+- name: Enable LLDP service
+  ios_lldp:
+    state: present
+    authorize: yes
+  register: result
+
+- assert:
+    that:
+      - 'result.changed == true'
+      - '"lldp run" in result.commands'
+
+- name: Enable LLDP service again (idempotent)
+  ios_lldp:
+    state: present
+    authorize: yes
+  register: result
+
+- assert:
+    that:
+      - 'result.changed == false'
+
+- name: Disable LLDP service
+  ios_lldp:
+    state: absent
+    authorize: yes
+  register: result
+
+- assert:
+    that:
+      - 'result.changed == true'
+      - '"no lldp run" in result.commands'
+
+- name: Disable LLDP service (idempotent)
+  ios_lldp:
+    state: absent
+    authorize: yes
+  register: result
+
+- assert:
+    that:
+      - 'result.changed == false'
+
+- debug: msg="END ios_lldp cli/basic.yaml on connection={{ ansible_connection }}"